如何向shell脚本传递参数



我有一些别名:

alias a1='ssh -A -t -p 22 user1@10.62.0.20 ssh user2@10.62.0.100'

和我有一些shell脚本s1.sh,它获得不同的参数。我需要通过变量传递这个参数:$args

args="a1 b2 c3 d4"
cat s1.sh | a1 "sudo su - user3; /bin/sh -s $args"

此代码工作,脚本执行,但不传递参数"/bin/sh -s $args"到s1.sh脚本。如何传递"$args"变量?

尝试:

alias a1='ssh -A -t -p 22 -J user1@10.62.0.20 user2@10.62.0.100'
< s1.sh a1 "sudo -u user3 /bin/sh -s $args"

或更好:

args=(a1 b2 c3 d4)
< s1.sh a1 "sudo -u user3 /bin/sh -s $(printf "%q " "{args[@]}"
# or double-escape, I am never sure in ssh-ing:
< s1.sh a1 "sudo -u user3 /bin/sh -s $(printf "%q" "$(printf "%q " "{args[@]}")")"

对于ssh ... ssh .. sudo su sh,您将像4次重新评估输入。

你的sh -s $args也完全被忽略了——所有的输入都被由sudo开始的外壳吃掉了,然后没有什么留给sh -s。此外,sudo suecho $(echo $(echo)))相似。它已经有sudo了,所以把用户改成sudo

谢谢大家。

我找到了解决办法。

这个命令不工作:

cat s1.sh | a1 "sudo su - user3; /bin/sh -s $args"

这个命令是工作的:

cat s1.sh | a1 "sudo -i -u user3 /bin/sh -s $args"

相关内容

  • 没有找到相关文章

最新更新