今日、私は怠惰でこれを行うための簡単な解決策を探しています。スペースを含む複数行を入力してください。コマンドを実行するときは、その行を引用符で囲む必要があります。私はこれがここで何度も要求されたと確信しているので、解決策の方向を教えてください。
例:
Aaa aaa
Bbb bbb
Ccc ccc
実行する必要がありますcommand "Aaa aaa" "Bbb bbb" "Ccc ccc"
。
問題に関する内容は次のとおりです。「dnf update」中に「dnf groupupdate」パッケージが表示されないのはなぜですか?
私は以下を提供しました:
# the first line is informational and redundant, thus tail
# each group is in a separate line
dnf -q group list --installed | tail -n +2 | while read group; do dnf group upgrade "$group"; done
ただし、グループごとに個別に実行されるため、dnf upgrade
すべてのグループを一度にアップグレードするよりも時間がかかります。
答え1
引用符は、C、Perl、sh など、一部のプログラミング言語の構文の一部です。
この行の周りに引用符を付けたくないので、一部のプログラミング言語の構文(たとえば、sh / perlには後で説明する参照演算子が含まれています。
xargs
目的は次のとおりです。
xargs -rd '\n' -a file.list some-command --
-r
、、、-d
およびは-a
GNU拡張です。
xargs
some-command
一度に渡すことができる引数の数の制限を解決するために複数回実行できます。
答え2
これは醜いですが、Bashではうまくいきます。
groups=()
while read -r group; do groups+=$group; done < \
<(sudo dnf -C -q group list --installed | tail -n +2)
sudo dnf group upgrade "${groups[@]}"
答え3
私も選ぶことができます。ステファン・シャジェラスの変奏曲GNUがあったらxargs
。ただし、私のメインシステムにはGNUがないため、次のxargs
行を入力する前に次の行を引用する必要がありますxargs
。
$ sed -e 's/^/"/' -e 's/$/"/' file | xargs printf '<%s>\n'
<Aaa aaa>
<Bbb bbb>
<Ccc ccc>
これは、入力に他の二重引用符がないと仮定します。ユーザーによっては、xargs
入力が空であるかどうかにかかわらず、ユーティリティを複数回実行することもできますxargs
(参照xargsに入力が与えられない場合は、xargsがユーティリティを実行しないようにします。)。