bin
すべてのスクリプトが配置されているホームフォルダにディレクトリを作成しました。それから私の.bashrcに以下を追加しました:
export PATH=$PATH:/home/myusername/bin
これにより、私が置いたファイルにどこからでもアクセスできます。ただし、一部のスクリプトはrootとして実行する必要があります。だから私は私の.bashrcをrootにシンボリックリンクすることができると思いました(例えば、/root/.bashrcが/home/myusername/.bashrcを指していますが、それが賢明なものかどうかはわかりません)。そのため、rootでスクリプトを実行する必要がある場合は、次の操作しか実行できません。
sudo program_that_requires_root
しかし、私は次のような結果を得ます:
sudo: program_that_requires_root: command not found
rootとしてログインしてプログラムを実行するとうまくいきます。それでは、私が望むことを達成する正しい方法は何ですか?
答え1
sudoersファイルにこの2行があることを確認する必要があります。
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
詳細については、次のURLを参照してください。
答え2
sudo
ほとんどの構成では、環境変数を組み込みPATH
値または管理者が提供したデフォルト値にリセットします。だから、単に入力することはできませんsudo myscript
。
ラッパー関数を作成できます。
sudo () {
local cmd
case $1 in
-*) :;; # there are options, change nothing
*/*) :;; # explicit path, change nothing
*) # a command name, look it up in our $PATH
cmd=$(type -p -- "$1")
if [[ -n $cmd ]]; then shift; set -- "$c" "$@"; fi;;
esac
command sudo "$@"
}
(これはbashで動作します。kshまたはzshtype -P
に変更してください。)type -p
答え3
デフォルトでは、sudoは環境をリセットします。 rootの.bashrcにパスを追加してみましたか?または、-Eを使用してsudoを呼び出します(sudoersのsetenvが設定されている場合、またはそのコマンドにSETENVフラグが設定されている場合にのみ有効です)。