如何将参数传递给shell脚本

时间:2021-01-20 08:57:59

标签: shell unix sh

我有一些别名:

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”变量?

2 个答案:

答案 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"