来自bash shell,我错过了一个简单的循环滚动(对于我在(...);做...完成;)
你会在cshell中发布典型的单行循环吗?
ONE LINERS PLEASE,而不是多行 THX
答案 0 :(得分:10)
csh
手册页指出:
fore语句,switch语句和while语句以及if语句的if-then-else形式要求主要关键字出现在输入行的单个简单命令中。如下所示。
和
foreach和end必须单独出现在不同的行上。
和
else和endif必须出现在输入行的开头; if必须单独出现在输入行或其他地方之后。
和
while和end必须单独出现在输入行上。
答案 1 :(得分:2)
csh
剧本。但比尔乔伊自己写了这个,我想这值得一些怀旧的努力......
set t=(*)
foreach i ($t)
echo $i >> /tmp/z
end
或仅foreach i (*)
这种循环结构适用于csh具有单词列表的内置概念。这种情况存在于bash中,但不存在于vanilla posix shell中。
set q=(how now brown cow)
echo $q[2]
foreach
循环巧妙地遍历此数据结构。
答案 2 :(得分:1)
我会说我已经以某种方式解决了它,尽管有csh选项,所以你可以这样做:
printf "while ( 1 ) \n ps -aux|grep httpd \n echo 'just a new row' \n sleep 2 \n end" | csh -f
答案 3 :(得分:0)
我努力让CSH shell轻松循环并运行相同的命令。
正如这个答案所指出: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
。