我想反复迭代、交替和/或循环多个命令;以某种模式或循环。期望的最终结果可以被认为并非完全不同watch
。
我一直在尝试这个基本公式的变体;但有些东西缺失、错误或其他:
for x in {1..60};
do
<first command> &&
sleep 1 &&
<second command>;
done
我认为这只是重复(do
ing)<first command> &&
六十次,然后所有后续操作只需一次,就像平常一样。我尝试过一些不同的事情;比如使用{
大括号}
、'
引号'
、"
引号"
等等;试图将命令组合在一起,但没有成功。
答案1
这对我有用:
for x in {1..60};
do echo "1" &&
sleep 1 &&
echo "3";
done
这也适用于我:
for x in {1..60};
do echo "1";
sleep 1;
echo "3";
done
你的另外两个命令是什么?
答案2
一种简单的方法是将每个命令放入数组的一个元素中:
commandlist=('echo "hello"' 'echo "howdy"')
然后迭代它:
for x in {1..10}; do
index=$((x%2)) # % takes the modulus (or remainder) of integer division
${foo[$index]}
sleep 1
done
${foo[0]}
展开为echo "hello"
,然后执行。
答案3
这也可以通过以下方式在 emacs 模式下的 bash 或 zsh 中完成control+o:
$ set -o emacs
$ echo a
a
$ echo b
b
$ echo c
c
然后使用历史导航来获取echo a
(或适当的)命令,然后混搭control+o多次。应重复导航到最近一个命令的命令,并为每个 再次循环control+o。
答案4
没关系,我想我已经明白了。
我想我只需要在和&& sleep 1
之间添加另一个。<second command>
; done
就像是:
for x in {1..60};
do
<first command> &&
sleep 1 &&
<second command> &&
sleep 1;
done