パスワードを「sudo」にパイプし、他のデータを「sudo」コマンドにパイプします。

パスワードを「sudo」にパイプし、他のデータを「sudo」コマンドにパイプします。

どちらのコマンドも機能します。 (-Sinはsudosudoにstdinからパスワードを読むように指示します。)

echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null
echo -e '\nsome\nmore\ntext' | sudo tee -a /etc/test.txt &> /dev/null

今2つを組み合わせたいです。つまり、すべてを一行で実装したいのです。しかし、もちろん、次のことはうまくいきません。

echo -e '\nsome\nmore\ntext' | echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null

何が効果がありますか?ありがとう :) - ロード

PS:関係のない小さな質問:1>>と同じですか?私は彼らが...

ベストアンサー1

これを行うことができます:

{ echo 'mypassword'; echo 'some text'; } | sudo -k -S tee -a /etc/test.txt &>/dev/null

要点は、同じ標準入力をsudo使用するため、tee両方とも同じソースから読み取られることです。に渡したい項目の前に「mypassword」+「\ n」と入力する必要がありますtee

コマンドを説明します。

  • グループコマンドを中かっこで囲みます。私たちはそれを{...}命令と考えることができます。コンテンツが{...}パイプに記録される方法は重要ではありません。
  • echo 'mypassword'パイプに "mypassword\n" を書き込みます。sudo後で読む内容です。
  • echo 'some text'パイプに「一部のテキスト\ n」を書き込みます。これがtee最終的に達成されるものです。
  • sudo -k -S「\n」に達するまで、標準入力(つまりパイプ)からパスワードを読みます。したがって、「mypassword\n」はここで使用されます。このスイッチは、パスワードの入力を求められ、ユーザーが最近使用したキャッシュされた資格情報を無視できるように-kするためのものです。sudo
  • tee標準入力から読み込み、残りの部分である「一部のテキスト\ n」を取得します。

PS:I / Oリダイレクト情報:はい1>filename、そうです>filename。どちらもstdoutを 。ファイル名。そして両方とも同じで、両方とも標準入力をリダイレクトします0<filename<filename

おすすめ記事