我有一个检查上一个命令的退出状态的函数,如果它不是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
显然空间是问题所在,我在这个页面上尝试了很多解决方案,但我得到的只是相同的输出和一个巨大的头痛。
所以在回复之前,请尝试我的功能,看看你是否能得到所需的输出。谢谢。
答案 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