从单个ssh连接的输出创建多个变量

时间:2013-12-25 05:20:09

标签: bash shell

我正在开发一个bash脚本,目前正在为多个变量执行以下操作:

variable1=$(ssh -T user@hostname "command one")  
variable2=$(ssh -T user@hostname "command two")  
variable3=$(ssh -T user@hostname "command three")  
variable4=$(ssh -T user@hostname "command four")  

是否有一种简单的方法(不会将多个命令的输出粘贴到单个文件中,然后使用该文件)在单个ssh连接上从不同的远程命令分配多个变量?

3 个答案:

答案 0 :(得分:2)

您可以通过在一个SSH命令中执行所有命令,然后将每个命令的输出返回到一个数组中来完成此操作。

最后,根据需要迭代数组并进行处理。

代码:

#!/bin/sh

IFS=$'\n'
VARS=`ssh user@host 'echo 1 2; echo 3'`

for A_VAR in $VARS; do
    echo "Out: $A_VAR"
done

输出:

> ./sshtest.sh
Out: 1 2
Out: 3

答案 1 :(得分:0)

没有。 bash *中没有“返回”,当然也没有超过ssh。您所能做的就是通过stdout和stderr传递数据。

*所有进程和函数的出口值都在0到255之间,并且在一个函数中你可以使用return以特定值退出,但它并没有真正返回任何其他语言。

答案 2 :(得分:0)

您可以通过“编程SSH库”(通过包装器)更好地控制您想要的内容。例如,在Perl中,您可以使用诸如Net:SSH::Perl之类的库。

my $ssh = Net::SSH::Perl->new("yourhost");
$ssh->login("user1", "pass1");

$ssh->cmd("foo");
$ssh->cmd("bar");

您通过单个$ ssh实例执行多个命令(与使用shell多次调用ssh命令行工具相反)。 这只是一个例子。

相关问题