簡體   English   中英

無法在變量中存儲多個命令並在 Bash 腳本中執行

[英]Unable to store multiple commands in a variable and execute in Bash script

我有一個 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>"

我相信會有更好的方法,但這對我來說似乎沒問題:

#!/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. 如果該函數使用任何僅存在於本地系統而非遠程系統上的二進制文件/腳本,則它將不起作用。 (明顯地!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM