【发布时间】:2014-08-06 05:08:20
【问题描述】:
我正在尝试通过 ssh 从远程计算机获取 uname -r 的值,并在我的本地脚本流中使用该值。
kern_ver=uname -r
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$c 'kern_ver=echo \$kern_ver'
但看起来该值没有传回本地脚本流。
【问题讨论】:
我正在尝试通过 ssh 从远程计算机获取 uname -r 的值,并在我的本地脚本流中使用该值。
kern_ver=uname -r
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$c 'kern_ver=echo \$kern_ver'
但看起来该值没有传回本地脚本流。
【问题讨论】:
将命令存储在变量cmd 中是可选的;您可以将命令硬编码为ssh 的字符串参数。关键是你只需通过ssh在远程主机上运行命令,并在本地主机上捕获它的输出。
cmd="uname -r"
kern_ver=$(sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@"$c" "$cmd")
【讨论】:
捕获是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-only 语法进行引用,因此只能保证在远程 shell 也是 bash 的情况下工作)。
【讨论】: