sudoコマンドの出力をいくつかのファイル、つまりsudoを作成した後に端末に表示される行に書きたいです。
[sudo] password for user:
sudo ls > file
orを使用すると、sudo ls 2> file
コマンド全体のstdoutとstderrがそれぞれ取得されます。また使用できません。それsudo > file
以外のsudo 2> file
場合はエラーが発生するため、sudoの後にいくつかのオプションまたはコマンドを使用する必要があります。それでは可能ですか?
答え1
使用すると、sudo -S
ユーティリティsudo
は標準エラーにプロンプトを書き込み、標準入力からパスワードを読み取ります。標準エラーの出力をキャプチャできます2>filename
。
実行するコマンドを提供する必要があり、sudo
標準エラーは次のとおりです。これファイル記述子を処理しない限り、コマンドはファイルにリダイレクトされます。
sudo -C 4 -S sh -c 'ls non-existant 2>&3' 3>&2 2>sudo.stderr
これにより出力がリダイレクトされます。sudo
sudo.stderr
実行されたコマンドを元の標準エラーストリームに書き込むことを許可します。これを行うには、標準エラーのコピーとしてファイルディスクリプタ3を開き、コマンドでこのファイルディスクリプタに明示的に書き込みます。そのためには、次のsudo
ことを要求する必要があります。なじみのないファイル記述子3(デフォルトではこれを実行します)これを行うには、管理者がファイルclosefrom_override
でオプションを有効にする必要があるかもしれませんsudoers
。
上記のコマンドには微妙なセキュリティ問題がある可能性があります。