Kesulitan menjalankan cd dengan sudo sebagai pengguna lain

12

Saya ingin menjalankan perintah pada shell atas nama pengguna lain. Perintahnya adalah sebagai berikut:

sudo -u USER cd /home/USER

saya mendapat

sudo: cd: command not found

Apa sintaks yang benar untuk perintah untuk meneruskan ke sudo?

coffeMug
sumber

Jawaban:

14

cdadalah shell builtin . Anda perlu memohon shell untuk mengeksekusi shell builtins:

sudo -u USER sh -c 'cd /home/USER'

ATAU

sudo -u USER bash -c 'cd /home/USER'
kworr
sumber
1
Ini tidak akan benar - benar melakukan sesuatu yang berguna --- shell akan keluar tepat setelah cd. OP mungkin ingin sudo -i.
derobert
5

cdbukan perintah eksternal, itu hanya shell builtin, jadi sudotidak bisa menjalankannya. Alasan mengapa cdhanya ada sebagai shell builtin adalah bahwa suatu proses tidak dapat mempengaruhi direktori saat ini dari proses lain; Oleh karena itu program yang mengubah direktori saat ini dan keluar segera tidak berguna. (Hampir tidak berguna: cdprogram akan mengembalikan status yang menunjukkan apakah itu berhasil.)

Jika Anda ingin mengubah ke direktori dan kemudian menjalankan perintah sebagai pengguna lain, jalankan shell yang melakukan semua itu.

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1

Saya cenderung menggunakan: sudo su - USERNAMEdan kemudian melakukan apa yang Anda butuhkan sebagai pengguna itu. Untuk berhenti ketik sajaexit

Algimantas Krasauskas
sumber
3
logging sebagai USERNAMEdan kemudian mengeksekusi perintah berbeda dengan menjalankan perintah secara langsung sebagaiUSERNAME
Pandya