Saya memiliki program yang diinstal di direktori khusus di bawah /opt. Untuk mempermudah menjalankannya, saya mengedit bashrc saya untuk menambahkan direktori tersebut ke jalur saya:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Ini berfungsi dengan baik jika saya ingin menjalankan program tanpa Sudo. Namun, jika saya mencoba menjalankannya dengan sudo, itu gagal dengan kesalahan "perintah tidak ditemukan".
$ sudo godi_console
sudo: godi_console: command not found
Memeriksa variabel PATH setelah menggunakan Sudo mengungkapkan bahwa itu tidak termasuk PATH yang sama dengan yang saya miliki sebagai pengguna biasa:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Mengapa PATH tidak sama? Apakah saya melakukan sesuatu yang salah? Saya di Debian Jessie, jika itu membuat perbedaan.
Satu hal yang saya coba adalah memanggil /opt/godi/sbin/godi_console secara langsung, meneruskan jalur absolut ke yang dapat dieksekusi. Sayangnya, itu tidak membantu dalam kasus khusus ini karena godi_console sendiri bergantung pada PATH yang disetel dengan benar.
Jawaban yang Diterima:
Anda selalu dapat melakukan:
sudo env "PATH=$PATH" godi_console
Sebagai tindakan pengamanan di Debian, /etc/sudoers memiliki secure_path opsi disetel ke nilai aman.
Perhatikan bahwa:
sudo "PATH=$PATH" godi_console
Dimana sudo memperlakukan argumen utama yang mengandung = karakter sebagai penetapan variabel lingkungan dengan sendirinya, juga akan berfungsi menjalankan godi_console dengan Anda $PATH (sebagai lawan dari secure_path ) di lingkungannya, tetapi tidak akan memengaruhi sudo jalur pencarian untuk dieksekusi, jadi tidak akan membantu sudo dalam menemukan godi_console .