root
以下のように、さまざまなユーザーがファイル書き込みを実装しようとしています。しかし、ファイルが生成されましたが、何も記録されません。
system("(echo 'ab' | su - root -c "echo 'Logging Enabled' |tee myLog.txt")>/dev/null");
また、>
代わりに試してみました。tee
system("(echo 'ab' | su - root -c "echo 'Logging Enabled' > myLog.txt")>/dev/null");
この目標を達成するためのより良い方法はありますか?
ありがとう
答え1
あなたの質問では、実際にファイルにどのテキストを表示したいのかわかりません。
シェルではできます
echo 'ab' | sudo tee myLog.txt
myLog.txt
標準出力に「ab」を書き込みます。使用の理由は、通常、tee
特権ユーザーとしてシェルを実行する必要がなく、標準出力への出力が実際には必要ではないため、これを抑制するためにリダイレクトを追加できる副作用によるものです。
echo 'ab' | sudo tee myLog.txt >/dev/null
中システム(サム)Cコードから呼び出すには、単に文字列に入れるだけです。
system("echo 'ab' | sudo tee myLog.txt >/dev/null");
以下は本質的に定義されていません。
echo 'ab' | echo 'Logging enabled'
しかし、通常、「ab」は単に廃棄されます。なぜなら、2番目のことはecho
何もせずに独自の出力を生成するからです。 2 つのテキストを組み合わせるには、次のようにします。
printf "%s\nLogging enabled\n" "$(echo ab)"
しかし、これら2つの別々のステートメントで何をしたいのかecho
、そうであればそれを処理する方法は非常に不明です。
(明らかなことを言い換えれば、a | b
標準出力をa
標準入力に接続し、両方のプロセスを並列に実行すると、標準入力は依然として標準入力と標準出力b
に接続されます。)a
b