通过ssh将值传递给shell脚本

通过ssh将值传递给shell脚本,shell,Shell,我想通过ssh向shell脚本传递一个值: 我有两台Linux机器:machine1和machine2 我在这些机器上有两个脚本:machine1上的“script1”和machine2上的“script2” 我已经完成了ssh设置,所以我可以从machine1无需密码登录machine2 /opt/script1 /opt/script2 但是没有打印字符串 请告诉我执行此操作的步骤。您能试试这样的脚本吗 脚本1.sh echo "enter your name" read name ssh

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

  • 我有两台Linux机器:machine1和machine2

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

  • 我已经完成了ssh设置,所以我可以从machine1无需密码登录machine2

    /opt/script1 /opt/script2
  • 但是没有打印字符串


  • 请告诉我执行此操作的步骤。

    您能试试这样的脚本吗

    脚本1.sh

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

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

    $0是命令的名称

    $1第一个参数

    $2秒参数

    $3第三参数等

    $#参数总数


    $@如果您尝试在machine1和machine2的运行会话中使用环境变量,所有参数都将列出

    在machine2上运行脚本之前,必须预先设置环境

    两种解决方案:

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

    这很好用

    其他

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

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

    警告不要同时应用这两个修补程序!有两个不同含义的不同答案!每一个都可以工作,但如果你应用第二次修改,它们将不再工作

    如果我以Rupert script1的身份输入我的名字,我就会这样做

    ssh root@machine2 "/opt/script2 Rupert"
    
    Script2正在查找$name,但尚未在machine2上设置该名称,因此脚本将不打印任何内容

    您可以将script2编辑到以下位置

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

    您应按以下方式更改脚本1:

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

    第一件事:更改
    /opt/script2
    要执行的操作:
    echo“Name:$Name”
    。现在,即使没有设置变量,也应该得到一些输出。如果您没有得到任何输出,那么您需要跟踪正在执行的内容(添加
    set-x
    作为
    /opt/script2
    的第一行)。如果您得到一些输出,那么您可以跟踪机器1上发生的情况。您也可以将
    echo“Name:$nme”
    添加到
    /opt/script1
    。您需要运行:
    ssh吗root@machine2sh-c“/opt/script2$name”
    ?Shebangs(包含二进制解释器路径的第一条注释行)不是无用的!即使如此,这可能有助于格式化!
    ssh root@machine2 "/opt/script2 Rupert"
    
    #!/bin/sh
    name=$1
    echo "$name"
    
    #!/bin/sh
    echo "enter your name"
    read name
    ssh root@machine2 `/opt/script2 $name`