$ source /etc/environment
$ sudo source /etc/environment
[sudo] password for t:
sudo: source: command not found
Tampaknya shell berbeda dari bash
yang dijalankan untuk menjalankan source /etc/environment
dan shell itu tidak memiliki source
builtin.
Tapi shell default saya dan root keduanya bash
.
$ echo $SHELL
/bin/bash
Jika sudo
memang menggunakan shell yang berbeda, mengapa? Saya melihat balasan slm , tetapi tidak mengerti dalam kasus saya.
source
adalah shell builtin..Anda tidak dapat menggunakansudo
untuk menjalankan shell builtin seperti perintah eksternal ..Jawaban:
source
adalah shell builtin, sehingga tidak dapat dijalankan tanpa shell. Namun, secara default,sudo
jangan jalankan shell. Darisudo
Jika Anda ingin mengeksekusi shell secara eksplisit, gunakan
-s
opsi:Yang masih tidak berguna karena setelah shell keluar, perubahan lingkungan hilang.
sumber
Dalam bidang penyelesaian masalah alih-alih menjawab pertanyaan , inilah cara yang paling jelas (bagi saya) untuk mencari file yang hanya dapat dibaca oleh root:
Ini menggunakan proses substitusi . Dibutuhkan output dari
cat
perintah dan mengubahnya menjadi file pseudo, yang dapat Anda aksessource
. sumber kemudian menjalankan perintah di shell saat ini.Perhatikan bahwa pada sebagian besar sistem,
/etc/environment
dapat dibaca dunia, jadi Anda harus dapat menjalankan ini:sumber
sudo
mengharapkan perintah tetapi Anda memberikan shell builtin sehingga tidak dapat menemukan perintah. Jika Anda menulistype source
, Anda dapat melihat output:source is a shell builtin
dan outputwhich source
kosong.Misalnya
sudo strace
akan bekerja danwhich strace
akan memberikan output karena strace adalah sebuah perintah.Sunting: Juga, Anda dapat melihat
sudo su;sudo source /etc/environment
berfungsi dengan baik sehingga shell yang berbeda tidak digunakan.sumber