/ optの下のカスタムディレクトリにプログラムがインストールされています。簡単に実行できるようにbashrcを編集して、そのディレクトリを自分のパスに追加しました。
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
sudoなしでプログラムを実行したい場合は、この方法が非常に効果的です。ただし、sudoを使用して実行しようとすると、「コマンドが見つかりません」というエラーで失敗します。
$ sudo godi_console
sudo: godi_console: command not found
sudo を使用した後に PATH 変数を確認すると、通常のユーザーと同じ PATH が含まれていないことがわかります。
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
なぜパスが違うのですか?私は何が間違っていましたか?違いがある場合は、Debian Jessieを使用しています。
私が試したことの1つは、/opt/godi/sbin/godi_consoleを直接呼び出して実行可能ファイルの絶対パスを渡すことでした。残念ながら、godi_console自体が正しく設定されたPATHに依存しているため、この特別なケースでは役に立ちません。
答え1
いつでも次のことができます。
sudo env "PATH=$PATH" godi_console
Debianのセキュリティ対策として、/etc/sudoers
このsecure_path
オプションは安全な値に設定されています。
気づく:
sudo "PATH=$PATH" godi_console
sudo
文字自体を含む先行引数を環境変数の割り当てとして扱い、実行にも=
適用できます。godi_console
あなたの $PATH
(とは逆secure_path
)はその環境にありますが、実行可能ファイルの検索パスには影響しないため、ファイルを見つけるのにsudo
役立ちません。sudo
godi_console
答え2
デフォルトパスを次に設定することもできます。/etc/sudoers
編集ファイルの使用visudo
その行を必要に応じて更新してください。
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
答え3
SUDOはデフォルトで環境変数をリセットします。
ドキュメントとenv_resetというオプションを確認してください。
/etc/sudoersで簡単に無効にすることができます。
答え4
sudo --preserve-env=PATH env [command]
これは私の側の secure_path をオーバーライドします。