3

我有一个函数可以检查上一个命令的退出状态,如果它不是 0(成功),则应该运行多个命令

revert()
{
if [ $? -ne 0 ]
then
  echo $#
  for c in $@
  do
    Execute command contained in passed string
  done
  echo "Operation failed. Reverting..."
  exit 1
fi
}

我尝试调用此函数并得到以下输出:

revert "ls" "ls -la"
2
ls ls -la
auten.py  canReach.sh  chpass.sh  newUser.sh  popo  secdir.sh
auten.py  canReach.sh  chpass.sh  newUser.sh  popo  secdir.sh
No command '-la' found, did you mean:
 Command 'tla' from package 'tla' (universe)
-la: command not found

显然空间是问题,我在这个页面上尝试了许多解决方案,但我得到的只是相同的输出和一个巨大的头痛。
所以在回复之前,请先试试我的功能,看看能不能得到想要的输出。谢谢你。

4

1 回答 1

3

使用"$@"引号,然后使用 . 执行命令eval "$c"

revert()
{
    (( $? == 0 )) && return 0

    for c in "$@"
    do
        eval "$c"
    done

    echo "Operation failed. Reverting..." >&2
    exit 1
}

您可以读x && y作“如果 x 则 y”。这是一种常见的脚本速记。第一行相当于:

if (( $? == 0 )); then return 0; fi
于 2013-03-14T16:54:54.150 回答