gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:28:35 25 4
gpt4 key购买 nike

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

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

最佳答案

使用带引号的"$@",然后使用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

关于bash - 传递带有空格的命令作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com