來自bash shell,我錯過了一個簡單的循環滾動(for i in(...); do ... done; )如何在csh shell的命令提示符中使用for循環 - 尋找合適的一個襯墊
你會在cshell中發佈典型的單行循環嗎?
ONE LINERS請,而不是多線 THX
來自bash shell,我錯過了一個簡單的循環滾動(for i in(...); do ... done; )如何在csh shell的命令提示符中使用for循環 - 尋找合適的一個襯墊
你會在cshell中發佈典型的單行循環嗎?
ONE LINERS請,而不是多線 THX
哇,我已經很多年沒有寫過劇本csh
。但比爾·喬伊都寫自己,我想這是值得留戀的一些努力......
set t=(*)
foreach i ($t)
echo $i >> /tmp/z
end
或只是foreach i (*)
這個循環結構,一個內置的概念,CSH有字的效果很好列表。這是在bash中存在的,但不是在香草posix shell中。
set q=(how now brown cow)
echo $q[2]
的foreach
循環通過該數據結構整齊迭代。
的csh
手冊頁指出:
在foreach,switch和while語句,以及在if-then-else的if語句的形式要求主要關鍵字出現在一個簡單的命令在輸入行上,如下所示。
和
兩者的foreach和端必須單獨出現在不同的行。
和
別人的文字和ENDIF必須出現在輸入行開始;如果必須單獨出現在其輸入行或其他之後。
和
while和end必須單獨對他們的輸入線出現。
另請參閱Csh編程中的「流量控制」認爲有害:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ – 2010-07-23 15:21:44
我要說的是,我已經弄好了,固定它儘管CSH選項,這樣你就可以做這樣的事情:
printf "while (1) \n ps -aux|grep httpd \n echo 'just a new row' \n sleep 2 \n end" | csh -f
我掙扎着輕鬆遍歷得到CSH外殼並運行相同命令結束。
正如指出的這樣的回答:https://stackoverflow.com/a/1548355/1897481
讓我放棄了一個製作oneliner工作。
最後穩定到具有下列別名以參數運行命令*在一個循環:
# while_cmd_w_sleep <SLEEP-TIME> <CMD + ARGS>
alias while_cmd_w_sleep '(echo '\''while (1)\n\!:2*\necho =================\necho Sleeping for \!:1.\nsleep \!:1\necho =================\nend'\'') | tcsh'
# for_n_cmd <LOOP_COUNT> <CMD + ARGS>
alias for_n_cmd '(echo '\''foreach x (`seq \!:1`)\necho =================\necho Iteration \[$x]\necho =================\n\!:2*\nend'\'') | tcsh'
# for_n_cmd_w_sleep <LOOP_COUNT> <SLEEP-TIME> <CMD + ARGS>
alias for_n_cmd_w_sleep '(echo '\''foreach x (`seq \!:1`)\necho =================\necho Iteration \[$x]\necho =================\n\!:3*\necho =================\necho Sleeping for \!:2.\nsleep \!:2\nend'\'') | tcsh'
樣本輸出:
$> for_n_cmd 3 echo hi
=================
Iteration [1]
=================
hi
=================
Iteration [2]
=================
hi
=================
Iteration [3]
=================
hi
while循環:
$> while_cmd_w_sleep 2s echo hello there
hello there
=================
Sleeping for 2s.
=================
hello there
=================
Sleeping for 2s.
=================
hello there
=================
Sleeping for 2s.
^C
*多個命令在循環中運行的示例:
$> for_n_cmd 3 'echo hi\\nsleep 2s\\necho done waiting'
=================
Iteration [1]
=================
hi
done waiting
=================
Iteration [2]
=================
hi
done waiting
=================
Iteration [3]
=================
hi
done waiting
在此示例中,三個命令echo hi
,sleep 2s
和echo done waiting
正在循環中運行。
*更新:*好的,好吧,我不知道如何在csh中執行單線程循環。 csh語法處理';'和換行符的方式不同。這不是單線友好的。 – DigitalRoss 2011-10-12 15:40:30