sudoコマンドの出力のみ取得できますか?

sudoコマンドの出力のみ取得できますか?

sudoコマンドの出力をいくつかのファイル、つまりsudoを作成した後に端末に表示される行に書きたいです。

[sudo] password for user:

sudo ls > fileorを使用すると、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

これにより出力がリダイレクトされます。sudosudo.stderr実行されたコマンドを元の標準エラーストリームに書き込むことを許可します。これを行うには、標準エラーのコピーとしてファイルディスクリプタ3を開き、コマンドでこのファイルディスクリプタに明示的に書き込みます。そのためには、次のsudoことを要求する必要があります。なじみのないファイル記述子3(デフォルトではこれを実行します)これを行うには、管理者がファイルclosefrom_overrideでオプションを有効にする必要があるかもしれませんsudoers

上記のコマンドには微妙なセキュリティ問題がある可能性があります。

関連情報