Bash

通過 ssh 執行 for 循環

  • December 22, 2015

大家好,

我正在嘗試通過 SSH 執行 for 循環。該循環用於獲取在伺服器上擁有帳戶的每個使用者的最後一次登錄,

ssh 172.20.2.1 '''for i in `cat /etc/passwd | awk -F: '{print $1}'`; do last -n 1 $i | sed -e '/^$/{N;d;}'; done'''

我收到錯誤消息,

   bash: -c: line 1: syntax error: unexpected end of file
  -bash: d: command not found
  -bash: }; done: command not found

我用Google搜尋,但沒有什麼可做的。

任何援助將不勝感激。

該錯誤是因為您正在使用'''引用您的命令。由於您還使用單'引號來引用您的awkandsed命令,因此 shell 認為命令結束並感到困惑。據我所知,沒有這樣的東西''';前兩個'被忽略,因為它們只是定義了一個空字元串,最後一個被視為一個開引號,由 your 的開引號封閉awk。如果您查看程式碼在問題中的突出顯示方式,您會看到這一點。

最簡單的解決方案是使用單引號將命令括起來,並為 and 使用雙sed引號awk。但是,您隨後需要轉義腳本$1中的awk,以便它不會被解釋為 shell 變數。你也無緣無故地使事情複雜化。您真正需要的是:

ssh localhost 'cut -d: -f1 /etc/passwd | 
   while read i; do last -n 1 $i | sed -e "/^$/{N;d;}"; done'

引用自:https://unix.stackexchange.com/questions/250801