我想通过ssh:
将值传递给shell脚本我有两台Linux机器:machine1和machine2
我在这些机器上有两个脚本:machine1上的“script1”和“script2”machine2。
我已经完成了ssh设置,所以我可以从机器1登录到机器2,无需密码
#!/bin/sh
echo "enter your name"
read name
ssh root@machine2 "/opt/script2 $name"
#!/bin/sh
echo "$name"
但没有打印字符串
请让我知道执行此操作的程序。
答案 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`