我试图通过ssh从远程计算机获取uname -r的值,并在我的本地脚本流中使用该值。
kern_ver=uname -r
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$c 'kern_ver=echo \$kern_ver'
但看起来这个值没有传递回本地脚本流。
答案 0 :(得分:4)
将命令存储在变量cmd
中是可选的;您可以将命令硬编码为ssh
的字符串参数。关键是你只需通过ssh
在远程主机上运行命令,并在本地主机上捕获它的输出。
cmd="uname -r"
kern_ver=$(sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@"$c" "$cmd")
答案 1 :(得分:1)
一如既往地捕获var=$(...)
。
ssh有点有趣,因为它无条件地调用远程shell,因此使用完全任意的命令(而不是像uname -r
这样的简单事物)需要不同的技术:
filename="/path/to/name with spaces/and/ * wildcard characters *"
printf -v cmd_str '%q ' ls -l "$filename"
output=$(ssh "$host" "$cmd_str")
这样你可以使用带空格的参数,并且它们将通过正确的引用传递给远程系统(但需要注意的是,不可打印的字符可能只用bash语法引用,所以这只能保证在远程shell也是bash的情况下工作。