シェル スクリプトを作成しており、su コマンド内で STDOUT をファイルにパイプしたいと考えています。出力されたファイルは別のユーザーが所有する必要があるため、su を使用します。ただし、出力するテキストと出力ファイルの名前が変数の場合、パイプを su で動作させることはできません(以下の例を参照)。
私の回避策は、su を使用せずにファイルにパイプし、そのファイルを必要なユーザーに chown することです。ただし、suを使用してこれを行う「シングルステップ」の方法があるかどうか疑問に思っていましたか?
例 (説明のみ):
#!/bin/sh
message="Hello World";
file="/tmp/HelloWorld.txt";
su someuser -c 'echo "${message}" > "${file}"';
この例のように${file}二重引用符で囲むと、次のエラーが発生します。
bash: : No such file or directory
を囲む二重引用符を削除すると${file}、次のエラーが発生します。
bash: ${file}: ambiguous redirect