Kol*_*sar 52 unix bash ksh exit
我想写这样的代码:
command="some command"
safeRunCommand $command
safeRunCommand() {
   cmnd=$1
   $($cmnd)
   if [ $? != 0 ]; then
      printf "Error when executing command: '$command'"
      exit $ERROR_CODE
   fi
}
但是这段代码并没有按照我想要的方式运行.哪里弄错了?
hav*_*exz 68
以下是固定代码:
#!/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不是必要的,而是一种良好的做法.它制作cmnd和ret_code本地safeRunCommandret_code不是必要的,但是一个很好的做法是将返回代码存储在某个变量中(并尽快存储),以便您可以像以后一样使用它printf "Error : [%d] when executing command: '$command'" $ret_codesafeRunCommand "$command".如果你没有,那么cmnd只会获得价值ls而不是ls -l.如果您的命令包含管道,则更为重要.typeset cmnd="$*"而不是typeset cmnd="$1".您可以尝试使用两者,具体取决于命令参数的复杂程度.注意:请记住一些命令将1作为返回代码,即使没有错误grep.如果grep找到了什么,它将返回0否则1.
我用KSH/BASH测试过.它工作得很好.如果您遇到问题,请告诉我.
尝试
safeRunCommand() {
   "$@"
   if [ $? != 0 ]; then
      printf "Error when executing command: '$1'"
      exit $ERROR_CODE
   fi
}