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:
cd
jest 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'
cd
nie jest poleceniem zewnętrznym, jest tylko wbudowaną powłoką, więc sudo
nie można go wykonać. Powodem, dla którego cd
istnieje 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: cd
program 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 - USERNAME
a następnie robię to, czego potrzebujesz jako ten użytkownik. Aby wyjść, po prostu wpiszexit
USERNAME
a następnie wykonywanie polecenia różni się od bezpośredniego uruchamiania polecenia jakoUSERNAME
cd
. OP prawdopodobnie chcesudo -i
.