通过ssh将值传递给shell脚本

时间:2013-04-08 00:10:59

标签: shell

我想通过ssh:

将值传递给shell脚本
  1. 我有两台Linux机器:machine1和machine2

  2. 我在这些机器上有两个脚本:machine1上的“script1”和“script2”machine2。

  3. 我已经完成了ssh设置,所以我可以从机器1登录到机器2,无需密码

    的/ opt / SCRIPT1

    #!/bin/sh
    echo "enter your name"
    read name
    ssh root@machine2 "/opt/script2 $name"
    

    的/ opt / SCRIPT2

    #!/bin/sh
    echo "$name"
    
  4. 但没有打印字符串

  5. 请让我知道执行此操作的程序。

4 个答案:

答案 0 :(得分:0)

可以尝试像这样的脚本

script1.sh

echo "enter your name"
read name
ssh root@machine2 "/opt/script2.sh $name"

script2.sh

echo $1

将命令行参数传递给shell脚本

$ 0是命令的名称

$ 1第一个参数

$ 2秒参数

$ 3第三个参数等等

$#参数总数

$ @将列出所有参数

答案 1 :(得分:0)

您尝试在 machine2 上的 machine1 中正在运行的会话中使用环境变量。

您必须在 machine2 上运行脚本之前预设环境!

两个解决方案:

首先 ,您只能将 machine1 script1 中的第3行更改为:

#!/bin/sh
echo "enter your name"
read name
ssh root@machine2 env name="$name" /opt/script2

这样可以正常使用!

否则

但是,如果您更喜欢使用 script1 示例中的语法,则可以在上更改 script2 时获得相同的结果machine2 获取命令行参数:

#!/bin/sh
name="$1"
echo "$name"

警告 不要同时应用这两个补丁!不同意义上有两个不同的答案!如果您应用第二次修改,它们中的每一个都可以工作但不再起作用了!

答案 2 :(得分:0)

如果我输入我的名字作为Rupert script1将会这样做

ssh root@machine2 "/opt/script2 Rupert"

Script2正在寻找$ name,但这还没有在machine2上设置,因此脚本不会打印任何内容。

您可以将script2编辑为以下

#!/bin/sh
name=$1
echo "$name"

答案 3 :(得分:0)

您应该更改脚本1,如下所示:

#!/bin/sh
echo "enter your name"
read name
ssh root@machine2 `/opt/script2 $name`