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
.