我有一些别名:
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 su
与echo $(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"