Linux set-e覆盖bash脚本中的参数变量($@)
我有一个脚本test.shLinux set-e覆盖bash脚本中的参数变量($@),linux,bash,Linux,Bash,我有一个脚本test.sh #/!bin/bash set -e trap errorhandler ERR errorhandler(){ status=$? trap - ERR exit $status } echo "$@" exit 0 当我调用sh test.sh'Hey'时,它将打印-e,而不是Hey 我的工作方法是使用反勾号环绕set-e,但不知道它是否仍能按预期工作 另一种解决方法是将其存储在第一行的变量中,但我希望我的设置-e位于第一行,原因很
#/!bin/bash
set -e
trap errorhandler ERR
errorhandler(){
status=$?
trap - ERR
exit $status
}
echo "$@"
exit 0
当我调用sh test.sh'Hey'
时,它将打印-e
,而不是Hey
我的工作方法是使用反勾号环绕set-e
,但不知道它是否仍能按预期工作
另一种解决方法是将其存储在第一行的变量中,但我希望我的设置-e
位于第一行,原因很明显(处理错误)。
有没有一个聪明的方法可以做到这一点?比如“嘿,别碰我的$@”命令。明白了
-e
和-e
注意破折号。第一个是正确的。
吸取的教训。不要直接从html复制代码。明白了
-e
和-e
注意破折号。第一个是正确的。
吸取的教训。不要直接从html复制代码。运行
bash test.sh'Hey'
而不是sh test.sh'Hey'
。这对我有效。试过了,对我无效,但谢谢。奇怪的是,我在sh和bash上都试过你的代码,在Mac上效果很好。在Linux上,它与bash一起工作,但与sh不同,在这里我得到了trap:ERR:bad trap
。我在两者上都使用bash4。你用的是什么版本?还有一件可能很小的事情:你的shebang应该是#/bin/bash
(注意初始斜杠)。可能不会影响你所看到的,但仅供参考。@RayToal\bin/bash
不是答案,但这是正确的方法。我编辑了这个问题。检查我的答案。谢谢你的帮助,谢谢!运行bash test.sh'Hey'
而不是sh test.sh'Hey'
。这对我有效。试过了,对我无效,但谢谢。奇怪的是,我在sh和bash上都试过你的代码,在Mac上效果很好。在Linux上,它与bash一起工作,但与sh不同,在这里我得到了trap:ERR:bad trap
。我在两者上都使用bash4。你用的是什么版本?还有一件可能很小的事情:你的shebang应该是#/bin/bash
(注意初始斜杠)。可能不会影响你所看到的,但仅供参考。@RayToal\bin/bash
不是答案,但这是正确的方法。我编辑了这个问题。检查我的答案。谢谢你的帮助,谢谢!哦,左边的比右边的短4个像素?你是怎么让那个字符出现的?谢谢。我从一个网站复制了set–e,并将其粘贴到vim。一个完美的例子是我名字前面的破折号哦,左边的比右边的短4个像素?你是怎么让那个字符出现的?谢谢。我从一个网站复制了set–e,并将其粘贴到vim。一个完美的例子是我名字前面的破折号