web-dev-qa-db-ja.com

異なるパラメーターを使用して同じコマンドを再実行する

私は次のコマンドを実行できることを知っています

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}または同様の何かを入力するだけで済みました。

13
ashays

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行で記述できます

13
njsg

これをスクリプト化せずに、コマンドラインで簡単に実行したい場合は、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詳細については。

5
Hobadee

関数を使用することもできます。これにより、最後に引数を変更する必要がなくなります。

runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }

runcom a
runcom b
4
Chris Down

前のコマンドで置換を実行できます。 「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つだけでなく複数の置換を実行します。

2
philant

Bashにはaliasコマンドがあります:

$ alias shotcommand='run-command --a --whole --lot --of --flags parameter'

使い方は:$ shotcommand a

1
dchirikov