无法在变量中存储多个命令并在Bash脚本中执行

时间:2017-01-31 06:21:03

标签: bash variables ssh

我的Bash脚本编写如下:

#!/bin/bash

PINGGOOGLE=echo "<H1>Ping Status</H1>";echo "<table border=\"1\">"; ping -c 3 -w 3 -q 192.168.16.129 | sed '/ping statistics/,$!d';echo "</table>"

echo '<html>' >> pinghost.txt
echo '<body>' >> pinghost.txt
ssh root@192.168.16.130 "${PINGGOOGLE}" >> pinghost.txt    
echo '</body>' >> pinghost.txt
echo '</html>' >> pinghost.txt

但脚本显示错误。

如果我在CLI中执行输出工作正常。当我存储在变量中并通过SSH在远程计算机上使用它时会出现问题。

echo "<H1>Ping Status</H1>";echo "<table border=\"1\">"; ping -c 3 -w 3 -q 192.168.16.129 | sed '/ping statistics/,$!d';echo "</table>"

1 个答案:

答案 0 :(得分:1)

我确信会有更好的方法,但这对我来说似乎没问题:

#!/bin/bash

PINGGOOGLE() { echo "<H1>Ping Status</H1>";echo "<table border=\"1\">"; ping -c 3 -w 3 -q 192.168.16.129 | sed '/ping statistics/,$!d';echo "</table>"; }

echo '<html>' >> pinghost.txt
echo '<body>' >> pinghost.txt
{ declare -f PINGGOOGLE; echo PINGGOOGLE; } | ssh root@192.168.16.130 >> pinghost.txt    
echo '</body>' >> pinghost.txt
echo '</html>' >> pinghost.txt

简而言之,不要将命令放在变量中。引用和转义存在问题。将其存储在bash函数中。

然后将该函数的定义传递给remote并调用该函数。

注意事项:

  1. 本地别名(如果有)将通过此方法进行扩展。
  2. 如果该函数使用任何本地系统变量,则它在远程系统上不可用。
  3. 如果该函数使用仅存在于本地系统而不是远程的任何二进制文件/脚本,则它将不起作用。 (显然!)