2013-07-22 41 views
0

我有一個奇怪的錯誤,基本上我已經設置了一個函數來在一個盒子上通過SSH運行遠程命令並獲取lan MAC地址和一些其他信息。我想把這個信息寫入一個csv文件。以逗號分隔的回顯多個數值的問題

當我運行BOXLANMAC=$(remote_command "ifconfig eth0 | grep HWaddr | cut -d' ' -f11")我可以回顯$ BOXLANMAC並獲得預期的輸出。

但是,當我運行echo $BOXLANMAC,$BOXLANMAC我得到,XX:XX:XX:XX:XX:XX,我期望看到XX:XX:XX:XX:XX:XX,XX:XX:XX:XX:XX:XX。我嘗試了許多echo命令的排列,對逗號使用引號和轉義字符,但沒有取得任何成功。我確信這很簡單,我應該能夠弄清楚,但谷歌似乎只是得到了關於逗號分割字符串的結果。

+0

奇怪。我重現了你在Linux機器上做的事情(儘管在本地,而不是遠程),並且當我做了echo $ boxlanman,$ boxlanmac'時,我得到了預期的輸出結果。我想知道是否當你遠程執行它時,可能會有一些奇怪的空白字符(如tab,cr或lf)在命令輸出的開始或結尾返回,該命令將分配給$ boxlanmac,並在$ boxlanmac變量被回顯時影響輸出。 – mti2935

回答

1

正如das.cyklone和我上面提到的那樣,您可能想要查看遠程命令是否返回影響echo命令輸出的空格。也許使用tr從$ boxlanmac變量中刪除任何空格將解決問題。請參閱How to trim whitespace from a Bash variable?瞭解如何執行此操作。

+0

有關的東西謝謝,這固定它,我'MAC = $(echo $ MAC | tr -d'\ r')和那個工作:) – James

1

你的例子似乎在測試過程中工作正常。我可以提供兩個建議:

1)使用awk而不是剪切爲空格。它更可靠,更容易測試。

2)如果echo不起作用,請嘗試printf。它給你更多的控制語句。

~-> BOXLANMAC=$(ifconfig eth0 | grep HWaddr | awk '{ print $5 }') 
~-> echo ${BOXLANMAC} 
78:2B:CB:88:E5:AR 
~-> echo ${BOXLANMAC},${BOXLANMAC} 
78:2B:CB:88:E5:AR,78:2B:CB:88:E5:AR 
~-> printf "%s,%s\n" ${BOXLANMAC} ${BOXLANMAC} 
78:2B:CB:88:E5:AR,78:2B:CB:88:E5:AR 
~-> 

祝你好運。

+0

感謝您的建議,但printf沒有工作,它必須是與遠程命​​令 – James

0

你試過了嗎:echo $ {BOXLANMAC},$ {BOXLANMAC}?