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:
cd
là 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'
cd
khô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 sudo
không thể thực thi nó. Lý do tại sao cd
chỉ 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 cd
chươ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 - USERNAME
và 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
USERNAME
và 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
.