Apakah ada cara untuk menjalankan perintah "seolah-olah" itu ada di sesi login baru?
Saya sudah mencoba env -i
. Namun, saya tidak ingin berurusan dengan berbagai variabel ENV yang harus saya atur atau hapus.
Saya juga sudah mencoba bash -c "some command"
dan bash -l -c "some commmand"
, tetapi mereka semua menyalin lingkungan saat ini.
Yang paling dekat saya datang adalah solusi ghetto: ssh me@localhost "some command"
/bin/bash --login
untuk mendapatkan perilaku itu. Saya menggunakannya misalnya untuk mendapatkan yang tepat$PATH
./bin/bash --l
, yang sudah saya coba. Ini menyalin lingkungan asli. Cobalah:export SOME_VAL=something
. Lalu/bin/bash --login
. Laluenv | grep SOME_VAL
. Nilainya akan ada di sana.Jawaban:
Inilah jawaban yang tidak memerlukan hak sudo atau kata sandi pengguna, tetapi masih menyediakan lingkungan seperti apa yang akan Anda dapatkan dengan login baru.
Contoh:
Hancurkan ini untuk penjelasan:
env -i HOME="$HOME"
: Membersihkan lingkungan. The-i
set up sebuah lingkungan yang kosong dengan tidak ada variabel apapun . Ini bermasalah karena itu berarti bahwa jika Anda mencoba menjalankannya secara naifbash -l
itu tidak akan memuat.bash_profile
dll Anda karenaHOME
tidak disetel. Untuk mengurangi ini, kami secara eksplisit lulusHOME="$HOME"
, menciptakan lingkungan di manaHOME
(dan hanyaHOME
) yang ditetapkan.bash -l -c ...
: Menjalankan perintah yang diinginkan dalam shell login. Anda akan memerlukan shell login untuk ini karena kami mulai dari lingkungan yang bersih dan perlu memuat ulang semuanya.Terutama:
sudo
versi tidak).su
versinya tidak).ssh
versi tidak).sumber
Untuk sesuatu yang bahkan lebih agresif cobalah
env -i bash
, tetapi itu akan menghapus semuanya termasuk $ HOME dan $ TERM.sumber
man sudo
dan menemukan: "jika pengguna target sama dengan pengguna yang memanggil, tidak diperlukan kata sandi." (su
Tampaknya selalu meminta kata sandi.) Aku benar-benar bodoh telah mengabaikan sesuatu yang begitu sederhana di paragraf pertamaman
halaman :( Saya menghindari sudo sejak awal karena saya menganggap itu selalu meminta kata sandi. Terima kasih lagi!$USER
Anda harus masuk sebagai root dan kemudiansudo -u ...
sebagai pengguna Anda. Jika Anda hanya melakukansudo -u
sebagai pengguna, Anda akan mewarisi.sudo
akses. Apakah ada metode alternatif yang tidak memerlukan sudo?su -l $USER
.ssh $USER@localhost <command>
bekerja lebih baik