如何解决如何将参数传递给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
启动的 shell 吃掉了,然后 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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。