最近サーバーにユーティリティをインストールしたところで購入が行われたことを確認しましたsudo
。つまり、foo
期待どおりに購入が実行されました。sudo foo
sudo: 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 bar
sudoパスに実際にコマンドが含まれていることを示すメッセージが表示されます。これはサブコマンドを起動するときを意味しますwhich: no foo in (/sbin:/bin:/usr/sbin:/usr/bin)
。/usr/bin
どうしたの?
コマンドを呼び出すことができることを確認するためにどのテストを実行できますか?sudo
いいえコマンドを発行しますか? (また、which
リンクされた質問のいくつかのコメントや回答に従って電話せずに警告します。そうでなければ問題ありません...)
ベストアンサー1
sudo
バイナリを実行するために使用されるため、シェルが実行されない限り、シェルの組み込み機能は使用できません。bash -c
bashに次の引数を解釈するように指示して文字列を解釈し、正しい組み込み関数を呼び出すように指示しますsudo bash -c "command -V <exe>"
。sudo
bash
command -V <exe>