我有一些别名:
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”变量?
答案 0 :(得分:0)
试试:
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
启动的 shell 吃掉了,然后 sh -s
什么也没有留下。此外,sudo su
类似于 echo $(echo $(echo)))
。它已经做了 sudo
,所以用 sudo
更改用户。
答案 1 :(得分:0)
谢谢大家..
我找到了解决方案。
此命令不起作用:
cat s1.sh | a1 "sudo su - user3; /bin/sh -s $args"
此命令有效:
cat s1.sh | a1 "sudo -i -u user3 /bin/sh -s $args"