/ opt/godi/sbin(カスタムディレクトリ)にインストールされているプログラムを実行する必要があります。そのディレクトリをPATHに追加する場合は、.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
PATHが同じではないのはなぜですか?私は何か間違ったことをしていますか?私はDebian Jessieを使用していますが、残念ながら、sudoにgodi_consoleへの絶対リンクを渡しても問題を回避できません。godi_console自体も、正しく設定されているPATHに依存しているためです。
あなたはいつでもできます:
Sudo env "PATH=$PATH" godi_console
Debianのセキュリティ対策として、/etc/sudoers
のsecure_path
オプションは安全な値に設定されています。
ご了承ください:
Sudo "PATH=$PATH" godi_console
Sudo
は、=
文字を含む先行引数をそれ自体で環境変数の割り当てとして扱い、godi_console
の実行時にyour$PATH
(asその環境ではsecure_path
)とは対照的ですが、Sudo
の実行可能ファイルの検索パスには影響しないため、Sudo
がgodi_console
を見つけるのに役立ちません。
/etc/sudoers
でデフォルトのPATHを設定することもできます
visudo
を使用してファイルを編集します
そして、行をあなたが望むものに更新してください:Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Sudoはデフォルトで環境変数をリセットしています。
マニュアルとenv_resetと呼ばれるオプションを確認してください。
/ etc/sudoersで無効にするだけです。
これは機能します:
Sudo $(which your_command)
Nvidia GPUのプロセスをリストするmy gps
スクリプトを呼び出す例:
$ Sudo gps
Sudo: gps: command not found
$ Sudo $(which gps)
PID TTY TIME CMD
9922 tty7 02:42:47 Xorg
説明 :
$ set -x;Sudo $(which gps);set +x
++ which gps
+ Sudo /home/xyztuv/myScripts/shl/gps
PID TTY TIME CMD
9922 tty7 02:42:39 Xorg
+ set +x
Sudo --preserve-env=PATH env [command]
これは私の終わりにsecure_pathをovverrides
これはうまくいきました:
Sudo "PATH=$PATH" [your command]
$ PATHをパスの値で変更しないでください。このように書くだけです。
例:$ Sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
たぶん、OPが要求することは正確ではないかもしれませんが、これは役立つかもしれません:
Sudo -u the_user PATH=$PATH:/opt/godi/bin sh -c 'echo $PATH'
これにより、PATHが変更されます内部 sudoedコマンド。
編集:上記はほとんどナンセンスなので、私がこれで何を意味するのかわかりません。代わりに以下を使用してください:
Sudo -u the_user sh -c 'PATH=$PATH:/opt/godi/bin echo $PATH'