Chcę uruchomić polecenie w powłoce w imieniu innego użytkownika. Polecenie jest następujące:
sudo -u USER cd /home/USER
dostaję
sudo: cd: command not found
Jaka jest poprawna składnia polecenia do przekazania do sudo?
Chcę uruchomić polecenie w powłoce w imieniu innego użytkownika. Polecenie jest następujące:
sudo -u USER cd /home/USER
dostaję
sudo: cd: command not found
Jaka jest poprawna składnia polecenia do przekazania do sudo?
Odpowiedzi:
cdjest wbudowaną powłoką . Musisz wywołać powłokę w celu wykonania wbudowanych powłok:
sudo -u USER sh -c 'cd /home/USER'
LUB
sudo -u USER bash -c 'cd /home/USER'
cdnie jest poleceniem zewnętrznym, jest tylko wbudowaną powłoką, więc sudonie można go wykonać. Powodem, dla którego cdistnieje tylko jako wbudowana powłoka, jest to, że proces nie może wpływać na bieżący katalog innego procesu; dlatego program, który zmienia bieżący katalog i natychmiast kończy działanie, jest bezużyteczny. (Prawie bezużyteczne: cdprogram zwróci status wskazujący, czy się powiódł).
Jeśli chcesz przejść do katalogu, a następnie uruchomić polecenia jako inny użytkownik, uruchom powłokę, która to wszystko robi.
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Zwykle używam: sudo su - USERNAMEa następnie robię to, czego potrzebujesz jako ten użytkownik. Aby wyjść, po prostu wpiszexit
USERNAMEa następnie wykonywanie polecenia różni się od bezpośredniego uruchamiania polecenia jakoUSERNAME
cd. OP prawdopodobnie chcesudo -i.