BASH:将参数从一个shebang传递到另一个shebang

BASH:将参数从一个shebang传递到另一个shebang,bash,shell,Bash,Shell,我有两个脚本 临时秘书 #! /usr/bin/foo echo "$@" #! /usr/bin/foo -x echo "$@" 福 除以下情况外,当temp.sh的shebang中有一个参数,如下所示 临时秘书 #! /usr/bin/foo echo "$@" #! /usr/bin/foo -x echo "$@" 这就造成了问题 /root/foo: line 4: source: -x: invalid option source: usage: source filena

我有两个脚本

临时秘书

#! /usr/bin/foo
echo "$@"
#! /usr/bin/foo -x
echo "$@"

除以下情况外,当temp.sh的shebang中有一个参数,如下所示

临时秘书

#! /usr/bin/foo
echo "$@"
#! /usr/bin/foo -x
echo "$@"
这就造成了问题

/root/foo: line 4: source: -x: invalid option
source: usage: source filename [arguments]

我是否可以将这个-x(或者任何和所有参数)传递给temp.sh的shebang,再传递给foo的shebang

如果要使用第一个参数,并在它与一组特定模式匹配时将其传递给shell解释器,您可以自己执行:

# treat first argument of -x or -v as intended for the shell interpreter
case $1 in -[xv]) set "$1"; shift;; esac

source "$@"

你能不能比“破坏事物”更具体一些?顺便说一句,例如,
echo
“$@”
之间缺少空间是导致事物损坏的一种方式。如果您显示了确切的错误,我们将更好地了解这是否是问题条目的一个键入或您要问的问题的原因。(BTW,考虑<代码> Prtff‘%q’‘$@’;回音< /COD>而不是<代码>回音“$@”/代码>;后者不能给您区分<代码> /您的脚本“Hello World”的区别。和
/yourscript“hello”“world”
,尽管它们是非常不同的命令)。@charlesduff感谢printf提示。。我编辑了我的问题。为什么你期望行为与你得到的不同
“$@”
指的是参数的完整列表,
-x
是一个参数,因此您要将它传递给
源代码
,源代码不期望或不接受它。
bash-x scriptname
工作,因为
-x
在脚本之前;但是您在这里运行的是调用
bash scriptname-x
,因此
-x
是脚本的参数,而不是shell解释器。如果您想编写脚本,使其显式地识别这些参数,您可以这样做,但这就是它所需要的。我想我只需要处理man bash中提到的每个选项。使用-x时,我的源代码也会显示在跟踪中。。不管怎样,我可以把它藏起来??)