2017-01-31 71 views
-3

執行我寫了一個bash腳本如下:無法多個命令存儲在一個變量,在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 [email protected] "${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

前綴代碼有四個空格。請看[編輯幫助](http://stackoverflow.com/editing-help)。 – Cyrus

+0

當我在腳本中使用時,我應該得到如下輸出。從MS1服務器 <表邊界= 「1」> --- 192.168.16.129 ping統計--- 3包

Codenvy Ping狀態發送,3接收,0%的分組丟失,時間2001ms RTT最小/平均/最大/ MDEV = 0.429/0.527/0.671/0.105毫秒 – hruday

+0

'PINGGOOGLE =回聲 「

Ping狀態

」'將(嘗試)執行被稱爲'

Ping狀態

'命令。你想達到什麼目的? – Biffen

回答

1

我相信會有更好的方法,但這似乎OK對我說:

#!/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 [email protected] >> pinghost.txt  
echo '</body>' >> pinghost.txt 
echo '</html>' >> pinghost.txt 

總之,不要把命令中的變量。引用和轉義有問題。將其存儲在一個bash函數中。

然後就是函數的定義傳遞給遠程和調用該函數。

注意事項:

  1. 本地別名,如果有的話,會用這種方法擴大。
  2. 如果該函數使用任何本地系統變量,它將不會在遠程系統上可用。
  3. 如果函數使用任何二進制/腳本,只存在於本地系統,而不是遠程,它不會工作。 (很明顯!)
相關問題