【问题标题】:Passing Value to a shell script via ssh通过 ssh 将值传递给 shell 脚本
【发布时间】:2013-04-08 00:10:59
【问题描述】:

我想通过 ssh 向 shell 脚本传递一个值:

  1. 我有两台 Linux 机器:machine1 和 machine2

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

  3. 我已经完成了 ssh 设置,所以我可以在没有密码的情况下从 machine1 登录到 machine2

    /opt/script1

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

    /opt/script2

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

请告诉我执行此操作的程序。

【问题讨论】:

  • 第一件事:将/opt/script2更改为:echo "Name: $name"。现在,即使没有设置变量,您也应该得到一些输出。如果你没有得到任何输出,你需要追踪正在执行的内容(可能添加set -x 作为/opt/script2 的第一行)。如果你得到一些输出,那么你可以追踪 machine1 上发生了什么。您也可以将echo "Name: $nme" 添加到/opt/script1 中。是否需要运行:ssh root@machine2 sh -c "/opt/script2 $name"
  • Shebangs(第一个包含二进制解释器路径的注释行)不是没用的!即使在 SO 上,这也可能有助于格式化!

标签: shell


【解决方案1】:

你可以试试这样的脚本

script1.sh

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

script2.sh

echo $1

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

$0 是命令的名称

$1第一个参数

$2 第二个参数

$3 第三个参数等等等等

$#参数总数

$@将列出所有参数

【讨论】:

    【解决方案2】:

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

    ssh root@machine2 "/opt/script2 Rupert"
    

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

    您可以将script2编辑到下面

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

    【讨论】:

      【解决方案3】:

      您应该将脚本 1 更改如下:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 2017-04-03
        • 2015-09-09
        • 2019-10-16
        相关资源
        最近更新 更多