Bash
如何在 bash 中觀看 for 循環?
是否可以在命令中使用
for
-loopwatch
?我不確定如何用我嘗試過的方法來解決這個錯誤:
$ for i in 1 2 3; do echo $i; done 1 2 3 $ watch -n 10 for i in 1 2 3; do echo $i; done -bash: syntax error near unexpected token `do' $ watch for i in 1 2 3; do echo $i; done -bash: syntax error near unexpected token `do' $
watch
的命令參數是一個與 一起執行的腳本sh -c
。如果命令參數只是一個由空格分隔的標記列表(例如
watch ls -l
),它會將它們全部連接起來並執行它們。但是不帶引號的 shell 元字元由您執行的 shell 使用,watch
並且永遠不會被watch
.這意味著像
;
&
|
<
>
etc 之類的元字元需要轉義或引用,以防止您執行的 shellwatch
將這些字元視為例如標記watch
命令結束、在後台執行 watch 命令或管道輸出的指令進入watch
另一個程序(而不是在監視腳本中執行管道)。通常的引用規則適用 - 單引號防止變數插值,否則雙引號。
man watch
最後有一個範例部分顯示了這一點。例如:
watch -n 10 'for i in 1 2 3; do echo $i; done'
或者
watch -n 10 'grep something /var/log/kern.log | tail'
注意:如果
watch
你-x
想在沒有sh -c
. 例如watch -x awk -f script.awk
。