传递带空格作为函数参数的命令

时间:2013-03-14 16:49:58

标签: bash function

我有一个检查上一个命令的退出状态的函数,如果它不是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

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

1 个答案:

答案 0 :(得分:3)

"$@"与引号一起使用,然后使用eval "$c"执行命令。

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

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

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

您可以将x && y视为“if x then y”。这是一种常见的脚本速记。第一行相当于:

if (( $? == 0 )); then return 0; fi