获取Bash和KornShell(Ksh)中命令的退出代码 [英] Get the exit code for a command in Bash and KornShell (ksh)

查看:0
本文介绍了获取Bash和KornShell(Ksh)中命令的退出代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写这样的代码:

command="some command"

safeRunCommand $command

safeRunCommand() {
   cmnd=$1

   $($cmnd)

   if [ $? != 0 ]; then
      printf "Error when executing command: '$command'"
      exit $ERROR_CODE
   fi
}

但此代码不能以我想要的方式工作。我在哪里犯了错误?

推荐答案

以下是固定代码:

#!/bin/ksh
safeRunCommand() {
  typeset cmnd="$*"
  typeset ret_code

  echo cmnd=$cmnd
  eval $cmnd
  ret_code=$?
  if [ $ret_code != 0 ]; then
    printf "Error: [%d] when executing command: '$cmnd'" $ret_code
    exit $ret_code
  fi
}

command="ls -l | grep p"
safeRunCommand "$command"

现在,如果您查看这段代码,我更改的几项内容如下:

  • 使用typeset不是必需的,但这是一个很好的实践。它使cmndret_code成为safeRunCommand的本地
  • 使用ret_code不是必需的,但最好将返回代码存储在某个变量中(并尽快存储),以便以后可以像我在printf "Error: [%d] when executing command: '$command'" $ret_code
  • 中那样使用它
  • 传递命令时使用引号将命令引起来,如safeRunCommand "$command"。如果不这样做,cmnd将只获得值ls,而不是ls -l。如果您的命令包含管道,则更重要。
  • 如果您想保留空格,可以使用typeset cmnd="$*"而不是typeset cmnd="$1"。根据命令参数的复杂程度,您可以同时尝试这两种方法。
  • ‘val’用于计算,以便包含管道的命令可以正常工作

注意:请记住,有些命令将1作为返回码,即使没有任何类似grep的错误。如果grep找到某项内容,则返回0,否则返回1。

我使用KornShellBash进行了测试。而且它运行得很好。如果您在运行此程序时遇到问题,请通知我。

这篇关于获取Bash和KornShell(Ksh)中命令的退出代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆