Ada beberapa pertanyaan di situs yang tampaknya terkait dengan masalah saya, tetapi saya tidak dapat menemukan solusi di dalamnya.
Sistem operasi saya adalah Ubuntu 12.04. Saya telah mvn
menginstal /tools/noarch/apache-maven-3.1.1
dan saya telah menambahkan baris berikut di akhir saya /etc/profile
:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Setelah itu saya eksekusi source /etc/profile
.
Sekarang masalah saya adalah: ketika saya menjalankan mvn --version
perintah berhasil dan mvn
dieksekusi ditemukan, sedangkan jika saya jalankan: sudo mvn --version
saya mendapatkan output: sudo: mvn: command not found
. Saya tahu itu PATH
mungkin berbeda ketika saya menjalankan perintah dengan sudo
dan itulah mengapa saya mencoba ini:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Hal lain yang saya coba adalah mengeksekusi sudo su -
dan kemudian mengetik mvn --version
. Dalam hal mvn
ini berhasil ditemukan dan perintah berhasil. Apa yang terjadi disini?
Jawaban:
$PATH
dievaluasi oleh shell Anda, jadi cek Anda tidak berfungsi seperti yang Anda harapkan./etc/sudoers
dikonfigurasi untuk mengganti AndaPATH
dengan yang standar.sudo
tidak memuat lingkungan shell login sebelum menjalankan perintah, jadi defaultPATH
dari/etc/sudoers
digunakan.su -
tidak membuka shell login, yang melibatkan memuat/etc/profile
. Lihatman bash
, bagian INVOKASI .Hapus saja pengaturan
PATH
ulang/etc/sudoers
. Sepertinya aturan yang disebutsecure_path
.CentOS
Di CentOS Anda dapat menambahkan
PATH
keDefaults env_keep
bagian:sumber
sudo: ./<some_binary>: command not found
. Saya menggunakan Arch Linux.Berikan
sudo
arus AndaPATH
dengan:sumber
-E
opsi ini sebagai tambahan, untuk melestarikan lingkungan lainnya. Bahkan, ini sangat berguna sehingga dapat dimasukkan ke dalam skrip / alias / fungsi agar mudah digunakan. Saya akan menambahkan ini sebagai jawaban terpisah - tetapi pujian untuk @ copyate!env: cmd: No such file or directory
- Ada ide mengapa itu terjadi?sudo: ./<some_binary>: command not found
. Saya menggunakan Arch Linux.Menguraikan jawaban @ opyate, saya menggunakan skrip shell berikut (yang dapat dinamai
mysudo
, misalnya):-E
memberitahusudo
untuk melestarikan lingkungan.env "PATH=$PATH"
diperluas di luarsudo
panggilan, membuat eksternalPATH
tersedia di dalamsudo
juga (ini diperlukan sebagai tambahan-E
karenaPATH
biasanya menerima perlakuan khusus selain perawatan yang diterima seluruh lingkungan)."$@"
meneruskan argumen yang diterima skrip kami kesudo
baris.Simpan skrip dalam file di direktori di
PATH
, berikan+x
izin, dan atur.sumber
Karena jawaban saat ini agak kabur, pengaturan khusus dalam
/etc/sudoers
mengubah jalur Anda adalahsecure_path
:Anda dapat memodifikasinya dengan
sudo visudo
, atau lebih baik lagi, menambahkan direktori yang Anda butuhkan:sumber
Saya memiliki masalah yang sama ketika saya pertama kali menginstal Maven . Masalahnya terpecahkan setelah saya menambahkan dua baris,
ke empat file:
dan untuk pengguna saat ini (
mehran
adalah nama pengguna Ubuntu saya):sumber
Anda harus memodifikasi variabel PATH root persis seperti yang Anda lakukan untuk diri sendiri, yaitu dengan menambahkan dua baris dalam profil sudo, yang terletak di /root/.bashrc, lalu sumber itu.
sumber
sudo source /root/.bashrc
dapatkan:sudo: source: command not found
dan tanpasudo
izin saya mendapatkan ditolak (seperti yang diharapkan). Saya percaya memulai terminal baru secara teori harus melakukan hal yang sama seperti sumber, tetapi setelah memulai terminal baru,sudo mvn --version
masih tidak menemukan apa pun.