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


13

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

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}か、似たようなことだけをしなければならなかった。


これはに依存しrun-command、多くのUnixコマンドはいくつかのファイル引数を順番に処理します。
フォンブランド

回答:


13

GNU bashまたは類似のものを使用していると仮定します。

おそらくforループですか?

for x in a b
do
    run-command --a --whole --lot --of --flags parameter $x
done

次のように1行で書くこともできます。 for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done


1
あなたは多くを持っている場合は、あなたがそのようにbashの拡張を使用することができます実行したいfor x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
h3rrmiller

そこに行くのは、多くの方法で生成されたスペース区切りリストです。そうそう、{a..z}*.pdf$(find ...)...
njsg

私の心がループにジャンプしなかった理由がわかりません。ありがとう!これはおそらく私が使用するものです。関数のアイデアは良いですが、私はこれが好きです。
アシェイ

1
ワンライナーは、;次のdoキーワードを削除して初めて機能しました。
ジンプ

@jimpありがとう、私はそれを削除するためにコードを変更しました;
njsg

5

これをスクリプト化せず、コマンドラインで簡単に実行したい場合、xargsコマンドはおそらく探しているものです。

xargsは標準入力から大量のコンテンツを取得し、コマンドの引数として使用し、必要に応じてそのコマンドを複数回実行します。

以下を試してください:

echo parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags

この例では、実行したい順列をxargsに単純に与えています。

実行ごとに引数を1つだけ使用するようにxargsに指示する「-n 1」フラグ。

「-d」フラグは、実行する引数間のデリミネーターとして入力で「、」を探すようにxargsに指示します。(引数に「、」が含まれている場合は、これを別のものに変更する必要があります。引数にスペースが含まれていない場合は、このフラグを完全に省略できます。)

詳細についてはman xargs、を参照してください。


4

関数を使用することもできますが、これは最後に変更する引数を持つことに制限されません:

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

runcom a
runcom b

2

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


1

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

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

使用法は次のとおりです。 $ shotcommand a


コードがもう少し複雑な場合は、関数もあります:
njsg

2
このソリューションは、変更するパラメーターが最後のパラメーターである場合にのみ機能しますか?
アシェイ

はい。あなたが正しいです。
-dchirikov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.