在solaris的shell脚本中使用ssh会话中的sed命令很困难

时间:2015-06-11 15:35:58

标签: ssh

我想在ssh会话中做这样的事情:

脚本

ssh remoteservername "
col=`sed -n "8p" /tmp/temp.txt`
echo $col>>/tmp/Ankur.txt
"

这不起作用,它打印空行而不是文本我想要存储在col变量中,为什么这样,这是有效的:

ssh remoteservername "
sed -n "8p" /tmp/temp.txt>>/tmp/Ankur.txt
"

这个Ankur.txt文件位于远程服务器上....主要关注的是如何在变量中获取命令的输出,以便我可以进一步使用它。

请告诉我们如何使其发挥作用。

由于

2 个答案:

答案 0 :(得分:0)

当您使用双引号时,变量名称将在传递之前展开,因此$col在远程服务器上运行之前将在本地进行扩展。您可以转义$ \$col或使用单引号,这可能更好,因为您也想在命令中使用双引号

ssh remoteservername '
col=`sed -n "8p" /tmp/temp.txt`
echo $col>>/tmp/Ankur.txt
'

不改变引号

ssh remoteservername 'sed -n "8p" /tmp/temp.txt >> /tmp/Ankur.txt'
正如您所指出的那样,

仍然有效,可以将输出直接重定向到文件中。这避免了上面双引号的可变扩展问题。

如果您将要执行许多步骤,您可能只想在remoteservername上创建一个脚本并在ssh命令中调用该脚本,而不是在同一命令行上执行大量操作。

答案 1 :(得分:0)

您可以使用本地文件执行复杂命令,并通过SSH在远程计算机中使用变量,如下所示。

  

<强> 1。创建输入文件&#39; input_file.txt&#39;

#-- input_file.txt
col=`sed -n "8p" /tmp/temp.txt`
echo $col>>/tmp/Ankur.txt
     

<强> 2。通过SSH

执行远程服务器中输入文件的命令      

ssh remoteservername "sh -s" < input_file.txt