bashで-と一緒に使用するとき<<と>>の違い

bashで-と一緒に使用するとき<<と>>の違い

これは、rpmパッケージのスクリプトを見るときに触れたように、少し具体的かもしれません。初期パッケージは次のとおりです。

rpm --import - << EOF
GPG
KEY
HERE
EOF

次のエラーが原因でこの操作が失敗しました。 -: 読み込みの取得に失敗しました(0)。

パッケージが修正され、次の問題なくインストールされます。

echo "GPG
KEY
HERE" >> rpm --import -

最初は失敗し、2番目は失敗する理由を理解できません。また、持つことができますか?

echo "GPG
KEY
HERE" | rpm --import -

オプションとして?

よろしくお願いします!

ベストアンサー1

最初の例では、インスタンス間のテキストを変数補間を使用して二重引用符で囲まれた文字列として扱います(つまり、逆引用EOF符と拡張子で始まるか、その中のすべての変数、コマンド、および式を$評価します)。これは次のとおりです。標準入力rpmコマンドに。

2番目のインスタンスは次の3行を追加します(変数補間も使用します)。

GPG
KEY
HERE --import -

rpm現在のディレクトリのファイルに移動します。特別な注意が払われますrpmコマンドを実行しません

3番目のオプションは3行を作成します(やはり変数補間を使用)。

GPG
KEY
HERE

〜のように標準入力コマンドのためrpm --import -

いずれの場合も、文字列の周りに二重引用符の代わりに一重引用符を使用するか、二重引用符(最初の場合は使用<<'EOF')を使用しないと、変数の拡張と補間を防ぐことができます。

また、読むためのマーカーとして使用されrpmていないようです。-標準入力だから、任意のオプションが欲しいものを得ることはできません。 GPGキーをファイルに書き込むか、<( echo... )代わりにこの設定を使用する必要があります-

おすすめ記事