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

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

私が使用できるあまり寛大なプログラムがあります。残念ながら、このプログラムは次のことを許可しません。

"command -a -b -c"

または

"command -abc"

したがって、常に次のように入力する必要があります。

command -a && command -b && command -c

入力するより効率的な方法があると確信していますが、理解することはできません。

答え1

次のことができます。

echo -a -b -c | xargs -n 1 command

または:

xargs -n1 command <<< '-a -b -c'

そして少し殻。

しかし、それが影響を与えることに注意してくださいcommand

そしてzsh

autoload zargs # best in ~/.zshrc
zargs -n 1 -- -a -b -c -- command

または簡単に:

for o (-a -b -c) command $o

呼び出しが失敗すると、呼び出しはcommand中断されません(終了状態255で失敗しない限り)。

これを行うには、次のものが必要です。

for o (-a -b -c) command $o || break

それでも$?失敗した呼び出しの終了ステータスに達しませんcommand。次のように変更できます。

(){for o (-a -b -c) command $o || return}

しかし、それまでは次より長くなりました。

command -a && command -b && command -c

答え2

command(あなたの場合)履歴拡張機能を使用すると、前のコマンドラインの最初の単語を参照でき、!!:0ここで必要なパラメータを追加できます。

command -a && !!:0 -b && !!:0 -c

たとえば、

% echo foobar && !!:0 spamegg && !!:0 baz    
echo foobar && echo spamegg && echo baz
foobar
spamegg
baz

参考にしてくださいステファン・チャゼラスは次のように指摘しています。、これは予期しない拡張を引き起こす可能性があります。

答え3

ループシェル関数をカプセル化するのはどうですか?

yourcmd() {
    local arg
    for arg; do
        thing "$arg" || return
    done
}

ここで「thing」は呼び出す実際のコマンドです。それから単に

yourcmd -a -b -c

これはどのコマンドでも一般化できます。

splitargs() {
    local cmd arg 
    cmd="$1"
    shift
    for arg; do
        "$cmd" "$arg" || return
    done
}

それから

splitargs somecommand -a -b -c

答え4

シェルスクリプトの作成複数回実行、最初の引数をコマンドとして使用し、残りの引数を一度に1つずつ実行します。

./複数回実行カーリーABCD

スクリプトはカールをコマンドとして使用し、「curl A」、「curl B」、「curl C」、「curl D」を実行する必要があります。これでスクリプトが制御されるので、1つのコマンドが失敗した場合、スクリプトが終了するのか、次の引数に進むのか、ユーザー入力を待つのかなどを判断できます。個々のコマンドの実行に基づいてスクリプト全体の終了状態を確認することもできます。

MultiRunスクリプトは次のとおりです。

#! /bin/bash
COMMAND=$1
shift #### Remove COMMAND from existing Parameters
for PARAMETER in "$@" ; #### Process all remaining Parameters
do
  # echo Executing "$COMMAND $PARAMETER" now #### Uncomment this line to see what command is getting executed.
  $COMMAND $PARAMETER
  # Check exit status and take action or wait for user input , if required.
  # read -p "finished executing command. press enter to continue. waiting..." #### Uncomment this line to pause between commands.
done
# Depending on the individual exit statuses , choose your exit status N with "exit $N".

次 のコマンドを 実行 し ます





これは非常に柔軟で再利用可能なソリューションです。

関連情報