Bash
通過 ssh 執行 for 循環
大家好,
我正在嘗試通過 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搜尋,但沒有什麼可做的。
任何援助將不勝感激。
該錯誤是因為您正在使用
'''
引用您的命令。由於您還使用單'
引號來引用您的awk
andsed
命令,因此 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'