2012-06-04 49 views
11

Tôi muốn chạy một đơn giản cho lệnh lặp với sudo, nhưng nó không làm việc:Sử dụng sudo với vòng lặp for

sudo -i -u user for i in /dir; do echo $i; done 

tôi nhận được lỗi sau:

-bash: syntax error near unexpected token `do' 

lẽ rất điều đơn giản tôi đang nhìn. Bất kỳ giúp đỡ?

Trả lời

21

sudo muốn một chương trình (+ đối số) làm tham số chứ không phải là một đoạn mã shell. Tuy nhiên, bạn có thể thực hiện việc này:

sudo -i -u user sh -c 'for i in /dir; do echo $i; done' 

Lưu ý các dấu nháy đơn. Nếu bạn sử dụng dấu ngoặc kép, vỏ của bạn sẽ cố gắng mở rộng $i trước sudo (hoặc, đúng hơn, shell chạy bởi nó) đã từng thấy nó.

+0

bạn đã nhận được! Chúc mọi người may mắn. – shellter

+0

Điều đó đã làm các trick, cảm ơn! – Axl

+0

Theo đó, mọi tệp đầu ra sẽ được ghi/lưu trong thư mục chính của người dùng được chỉ định. Điều gì xảy ra nếu tôi muốn đầu ra được viết trong một cái cụ thể? –

3

Bạn có thể thử sudo bash -c 'lệnh ở đây'

1

Đặt sudo bên trong vòng lặp:

for i in /dir; do 
    sudo -u user somecommand $i 
done 

này sẽ không làm việc mà không bước thêm nếu bạn cần quyền của người sử dụng khác để tạo glob cho vòng lặp, ví dụ.

+0

Vấn đề với điều này là nếu thời gian chờ sudo là không đủ lớn, nó sẽ yêu cầu mật khẩu tất cả các thời gian: ( –

Các vấn đề liên quan