私は次のコマンドを実行できることを知っています
ls Some{File,Folder}
そして、これを実行するのと同じです:
ls SomeFile SomeFolder
(mv place_{a,b}
などにも使用します)
しかし、私はこのようなことをすることができる別のショートカットがあるかどうか疑問に思っていました:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
そして、私はrun-command --a --whole --lot --of --flags parameter {a,b}
または同様の何かを入力するだけで済みました。
GNU bash
または類似のものを使用していると仮定します。
多分for
ループ?
for x in a b
do
run-command --a --whole --lot --of --flags parameter $x
done
for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done
としても1行で記述できます
これをスクリプト化せずに、コマンドラインで簡単に実行したい場合は、xargs
コマンドがおそらく必要です。
xargsは標準入力から大量のコンテンツを取得し、それをコマンドの引数として使用し、必要に応じてそのコマンドを複数回実行します。
以下を試してください:
echo parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags
この例では、xargsに実行させたい置換を単に与えています。
「-n 1」フラグは、実行ごとに1つの引数のみを使用するようにxargsに指示します。
"-d、"フラグは、実行する引数の間の区切り文字として、入力で "、"を探すようにxargsに指示します。 (引数に "、"が含まれている場合は、これを別の値に変更する必要があります。引数にスペースが含まれていない場合は、このフラグを完全に省略できます。)
見る man xargs
詳細については。
関数を使用することもできます。これにより、最後に引数を変更する必要がなくなります。
runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }
runcom a
runcom b
前のコマンドで置換を実行できます。 「a」のすべてのインスタンスが「b」に置き換えられるため、これは{a、b}の例では機能しません。しかし、次のコマンドを実行するとします。
run-command --a --whole --lot --of --parameter --format xml
run-command --a --whole --lot --of --parameter --format son
あなたはそれを行うことができます
run-command --a --whole --lot --of --parameter --format xml
!!:s/xml/json/
Bashが置換して実行します
run-command --a --whole --lot --of --parameter --format json
Gs(グローバル置換)を使用して、1つだけでなく複数の置換を実行します。
Bashにはalias
コマンドがあります:
$ alias shotcommand='run-command --a --whole --lot --of --flags parameter'
使い方は:$ shotcommand a