Rắc rối với việc chạy cd với sudo như một người dùng khác


12

Tôi muốn chạy một lệnh trên shell thay mặt cho một người dùng khác. Lệnh này như sau:

sudo -u USER cd /home/USER

tôi có

sudo: cd: command not found

Cú pháp đúng cho lệnh truyền sang sudo là gì?

Câu trả lời:


14

cdlà một vỏ dựng sẵn . Bạn cần phải gọi shell để thực thi các nội trang shell:

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

HOẶC LÀ

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

1
Điều này sẽ không thực sự làm bất cứ điều gì hữu ích --- vỏ sẽ thoát ra ngay sau đó cd. OP có lẽ muốn sudo -i.
derobert

5

cdkhông phải là một lệnh bên ngoài, nó chỉ là một shell dựng sẵn, vì vậy sudokhông thể thực thi nó. Lý do tại sao cdchỉ tồn tại dưới dạng shell dựng là vì một quy trình không thể ảnh hưởng đến thư mục hiện tại của quy trình khác; do đó, một chương trình thay đổi thư mục hiện tại và thoát ngay lập tức là vô ích. (Hầu như vô dụng: một cdchương trình sẽ trả về trạng thái cho biết liệu nó có thành công hay không.)

Nếu bạn muốn thay đổi thành một thư mục và sau đó chạy các lệnh như một người dùng khác, hãy chạy một shell thực hiện tất cả điều đó.

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'

1

Tôi có xu hướng sử dụng: sudo su - USERNAMEvà sau đó làm những gì bạn cần với tư cách là người dùng đó. Để thoát chỉ cần gõexit


3
đăng nhập USERNAMEvà sau đó thực thi lệnh khác với lệnh chạy trực tiếp nhưUSERNAME
Pandya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.