入力にスペースが含まれる行は、コマンドの引用符として使用されます。

入力にスペースが含まれる行は、コマンドの引用符として使用されます。

今日、私は怠惰でこれを行うための簡単な解決策を探しています。スペースを含む複数行を入力してください。コマンドを実行するときは、その行を引用符で囲む必要があります。私はこれがここで何度も要求されたと確信しているので、解決策の方向を教えてください。

例:

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およびは-aGNU拡張です。

xargssome-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がユーティリティを実行しないようにします。)。

関連情報