Problem z uruchomieniem cd z sudo jako inny użytkownik

12

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?

kubek kawy
źródło

Odpowiedzi:

14

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'
kworr
źródło
1
To nie zrobi nic użytecznego --- powłoka wyjdzie zaraz po cd. OP prawdopodobnie chce sudo -i.
derobert
5

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'
Gilles „SO- przestań być zły”
źródło
1

Zwykle używam: sudo su - USERNAMEa następnie robię to, czego potrzebujesz jako ten użytkownik. Aby wyjść, po prostu wpiszexit

Algimantas Krasauskas
źródło
3
logowanie jako, USERNAMEa następnie wykonywanie polecenia różni się od bezpośredniego uruchamiania polecenia jakoUSERNAME
Pandya,