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ì?
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:
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'
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'
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
USERNAMEvà sau đó thực thi lệnh khác với lệnh chạy trực tiếp nhưUSERNAME
cd. OP có lẽ muốnsudo -i.