Saya perlu menjalankan program yang diinstal pada / opt / godi / sbin (direktori khusus). Jika saya menambahkan direktori itu ke PATH saya, dengan menambahkan baris berikut ke file .bashrc saya
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
maka saya dapat mencoba menjalankan perintah dengan baik (kecuali bahwa itu gagal karena perlu sudo). Namun, ketika saya mencoba menggunakan sudo:
sudo godi_console
Saya mendapatkan kesalahan berikut
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 normal:
$ 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 menggunakan Debian Jessie dan sayangnya saya tidak bisa menyelesaikan masalah dengan mengirimkan sudo tautan absolut ke godi_console karena godi_console itu sendiri juga tergantung pada PATH yang diatur dengan benar.
sudo -E godi_console
.-E
berarti "melestarikan lingkungan".secure_path
dan / atau env_reset dikonfigurasi seperti halnya di banyaksudo
penyebaran seperti di Debian.su
tidaksudo
, adalah unix.stackexchange.com/questions/460478 .Jawaban:
Anda selalu dapat melakukan:
Sebagai tindakan keamanan pada Debian,
/etc/sudoers
memilikisecure_path
pilihan set nilai yang aman.Perhatikan bahwa:
Di mana
sudo
memperlakukan argumen utama yang berisi=
karakter sebagai penugasan variabel lingkungan dengan sendirinya, juga akan berfungsi saat berjalangodi_console
dengan Anda$PATH
(sebagai lawan darisecure_path
) di lingkungannya, tetapi tidak akan memengaruhisudo
jalur pencarian untuk dieksekusi, jadi tidak akan membantusudo
menemukan itugodi_console
.sumber
sudo "PATH=$PATH" godi_console
by the way tidak bekerja di CentOs7. Membutuhkan envsudo "PATH=$PATH" godi_console
pernah benar-benar berfungsi?sudo
menerimaVAR=value
argumen, memengaruhi lingkungan perintah yang dijalankannya, tetapi tidak seperti dienv
ataubash
,sudo
sepertinya tidak membiarkan ini memengaruhi bagaimana ia melihat perintah. Saya hanya menguji ini (baru-baru ini) di Ubuntu 16.04. Tapi saya mencoba menambahkanexempt_group
opsi kesudoers
(hanya untuk pengujian - saya tidak menganggap ini solusi!) Dan hasilnya mencerahkan. Perintah-perintah dari formulir ituPATH="$PATH" sudo some-command
mulai berfungsi, tetapi perintah-perintah itusudo PATH="$PATH" some-command
masih belum berfungsi .Anda juga dapat mengatur PATH default di
/etc/sudoers
edit file menggunakan
visudo
dan perbarui baris sesuai keinginan Anda:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
sumber
SUDO melakukan env variabel reset secara default.
Lihatlah manual dan opsi yang disebut env_reset.
Anda hanya perlu menonaktifkannya di / etc / sudoers.
sumber
env_reset
tampaknya tidak memengaruhisudo
perilaku w / r / t PATH.Ini bekerja :
Contoh memanggil
gps
skrip saya yang mencantumkan proses Nvidia GPU:Penjelasan:
sumber
ovverrides ini secure_path di pihak saya
sumber
Ini berhasil:
Jangan mengubah $ PATH dengan nilai jalur Anda, Anda cukup menuliskannya dengan cara ini
contoh:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
sumber
Mungkin tidak persis apa yang diminta OP, tetapi ini mungkin membantu:
Ini mengubah PATH di dalam perintah sudoed.
Sunting: Saya tidak yakin apa yang saya maksudkan dengan ini, karena di atas cukup banyak omong kosong. Gunakan yang berikut ini sebagai gantinya:
sumber