私の推測は次のとおりです。
echo "Generating some text" | su - -c cat >/output/file
しかしsu
言った:
su: must be run from a terminal
あなたは何をしますか?
ベストアンサー1
sudo
これをサポートしてください。
$ echo hello world | sudo cat
SUDO password:
hello world
違いは、(ターゲットユーザーの)パスワードではsudo
なくユーザーのパスワードを提供する必要があることです。ただし、必要に応じてroot
(targetpw
またはrunaspw
)ディレクティブを使用してrootpw
この動作を変更できますsudoers.conf
。
ただし、実行しようとしている内容を読み取ると、昇格の問題が解決されますが、期待どおりに実行されるわけではありません。これは/output/file
、ルートとして作成されず、ユーザーとして作成/変更されることを意味します。
その理由は、コマンドが呼び出される前にシェル出力リダイレクトが実行されるためです。したがって、シェルが開き、/output/file
開いたファイルをsu
/ sudo
(したがってcat
)に渡します。
ただし、ユーティリティは独自にファイルを開くので、tee
これを行うために使用できます。tee
echo "hello world" | sudo tee /output/file >/dev/null
デフォルトでは、tee
出力は/output/file
STDOUTにコピーされますが、STDOUTは/dev/null
。
次のようにすることもできます。
echo "hello world" | sudo sh -c 'cat > /output/file'
...あまり神秘的ではありませんね。