複数のコマンドを繰り返し交互に使用するには?

複数のコマンドを繰り返し交互に使用するには?

特定のパターンやループで複数のコマンドを繰り返し、置換、および/または繰り返したいと思います。所望の最終結果は完全に変わらないと見なすことができますwatch

私はこの基本式を変えてみましたが、何かが欠けているか間違っています。

for x in {1..60}; 
do 
    <first command> && 
    sleep 1 && 
    <second command>; 
done

私の考えでは、60回だけ繰り返され、その後のdoすべて<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つのコマンドは何ですか?

答え2

簡単な方法は、各コマンドを配列の1つの要素に入れることです。

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との間にもう1つ追加する必要があると思います。<second command>; done

それは次のとおりです。

for x in {1..60}; 
do 
    <first command> && 
    sleep 1 && 
    <second command> &&
    sleep 1; 
done

関連情報