$ PATHでsudoコマンドを使用できるかどうかはどうすればわかりますか?

$ PATHでsudoコマンドを使用できるかどうかはどうすればわかりますか?

最近サーバーにユーティリティをインストールしたところで購入が行われたことを確認しましたsudo。つまり、foo期待どおりに購入が実行されました。sudo foosudo: foo: command not found

私はこれを.sudoリンクと一緒にコマンド/usr/local/binとsudoを使って追跡しました。インストールスクリプトを修正してインストールしましたが、すべてが順調に行われました。PATH/usr/bin/usr/bin

この状況を検出し、後で何かが変更されて何らかの理由でコマンドを使用できない場合は、エラーを報告するようにサーバー設定スクリプトを変更したいと思います。私はこれから働いています。StackOverflowの質問そしてその答えは、次のテストを使用することを示唆しています。

command -v foo >/dev/null 2>&1 || { echo "I require foo but it's not installed.  Aborting." >&2; exit 1; }

ただし、これは期待したものとは異なりますsudo

$ command -v foo
/usr/bin/foo
$ sudo command -v foo
sudo: command: command not found
$ sudo type foo
sudo: type: command not found
$ sudo hash -v foo
sudo: hash: command not found
$ sudo foo
   ...executes normally...
$ sudo bash
# command -v foo
/usr/bin/foo
# sudo command -v foo
sudo: command: command not found
# foo
   ...executes normally...
# sudo foo
   ...executes normally...

奇妙なことに、sudo which fooコマンドが見つかりました/usr/bin/。コマンドを実行すると、sudo which barsudoパスに実際にコマンドが含まれていることを示すメッセージが表示されます。これはサブコマンドを起動するときを意味しますwhich: no foo in (/sbin:/bin:/usr/sbin:/usr/bin)/usr/bin

どうしたの?
コマンドを呼び出すことができることを確認するためにどのテストを実行できますか?sudo いいえコマンドを発行しますか? (また、whichリンクされた質問のいくつかのコメントや回答に従って電話せずに警告します。そうでなければ問題ありません...)

ベストアンサー1

sudoバイナリを実行するために使用されるため、シェルが実行されない限り、シェルの組み込み機能は使用できません。bash -cbashに次の引数を解釈するように指示して文字列を解釈し、正しい組み込み関数を呼び出すように指示しますsudo bash -c "command -V <exe>"sudobashcommand -V <exe>

おすすめ記事