1. ホーム
  2. security

[解決済み] コマンドの標準入力に変数の値を渡すには?

2022-06-03 19:30:37

質問

シェルスクリプトを書いていますが、ある程度安全でなければなりません。つまり、コマンドのパラメータを通して安全なデータを渡さず、できれば一時ファイルを使用しないようにします。コマンドの標準入力に変数を渡すにはどうしたらよいでしょうか。

あるいは、それが不可能な場合、そのようなタスクのために一時ファイルを正しく使用するにはどうしたらよいでしょうか。

どのように解決するのですか?

簡単ですが、エラーが起こりがちです。 echo

このようなシンプルなもので十分です。

echo "$blah" | my_cmd

の場合、正しく動作しない可能性があることに注意してください。 $blah が含まれている場合 -n , -e , -E など; またはバックスラッシュを含む場合 (bash のコピーである echo がない場合、リテラルバックスラッシュを保持します。 -e がない場合でも、デフォルトではバックスラッシュをエスケープシーケンスとして扱い、対応する文字に置き換えます。 -e がなくても対応する文字に置き換わります。)

より洗練されたアプローチ printf

printf '%s\n' "$blah" | my_cmd

これは、上記のような欠点はありません。すべての可能なC文字列(NULを含まない文字列)は、変更されずに表示されます。