Czy istnieje sposób na uruchomienie polecenia „tak, jakby” odbywało się ono w nowej sesji logowania?
Już próbowałem env -i
. Nie chcę jednak radzić sobie z różnymi zmiennymi ENV, które muszę ustawić lub wyłączyć.
Próbowałem również bash -c "some command"
i bash -l -c "some commmand"
, ale wszystkie one kopiują obecne środowisko.
Najbliższe, jakie przyszedłem, to rozwiązanie w getcie: ssh me@localhost "some command"
/bin/bash --login
aby uzyskać takie zachowanie. Używam go np. Do uzyskania właściwego$PATH
./bin/bash --l
, co już próbowałem. Kopiuje oryginalne środowisko. Wypróbuj:export SOME_VAL=something
. Potem/bin/bash --login
. Potemenv | grep SOME_VAL
. Wartość będzie tam.Odpowiedzi:
Oto odpowiedź, która nie wymaga uprawnień sudo ani hasła użytkownika, ale zapewnia środowisko takie, jak na nowym logowaniu.
Przykład:
Podział na wyjaśnienia:
env -i HOME="$HOME"
: Czyści środowisko. W-i
ustanawia pustego środowisku bez zmiennych ogóle . Jest to problematyczne, ponieważ oznacza, że próba naiwnego uruchomieniabash -l
nie spowoduje załadowania.bash_profile
itp., PonieważHOME
nie jest ustawiona. Aby temu zaradzić, jawnie przechodzimyHOME="$HOME"
, tworząc środowisko, w którym ustawionoHOME
(i tylkoHOME
).bash -l -c ...
: Uruchamia żądane polecenie w powłoce logowania. Będziesz potrzebował do tego powłoki logowania, ponieważ zaczynamy od czystego środowiska i musimy przeładować wszystko.Szczególnie:
sudo
wersja tak).su
wersja tak).ssh
wersja tak).źródło
Dla czegoś jeszcze bardziej agresywnego spróbuj
env -i bash
, ale to wszystko rozbija, w tym $ HOME i $ TERM.źródło
man sudo
i stwierdziłem: „jeśli użytkownik docelowy jest taki sam jak użytkownik wywołujący, hasło nie jest wymagane”. (su
Wydaje się, że zawsze prosi o hasło.) Jestem takim głupcem, że przeoczyłem coś tak prostego w pierwszym akapicieman
strony :( Unikałem sudo, ponieważ zakładałem, że zawsze prosi o hasło. Dzięki znowu!$USER
użytkownik root, a następniesudo -u ...
jako użytkownik. Jeśli zrobisz tosudo -u
jako użytkownik, odziedziczysz.sudo
dostępu. Czy istnieje alternatywna metoda, która nie wymaga sudo?su -l $USER
.ssh $USER@localhost <command>
to lepiej