2012-03-31 21 views
24

Tôi đang cố gắng để chạy script này trên Mac OS 10.7 (Lion) và tôi nhận được lỗi:Mac OS:/usr/bin/env: thông dịch viên xấu: Hoạt động không được phép

$ bbcolors 
-bash: /usr/local/bin/bbcolors: /usr/bin/env: bad interpreter: Operation not permitted 

tôi đã chạy thành công tập lệnh này trên các máy Mac khác của tôi. Nó chỉ là this script được tải xuống và chưa được sửa đổi từ Daring Fireball.

Tôi đã tìm thấy this person với một vấn đề rất giống nhưng câu trả lời được chấp nhận là hệ thống tệp có tùy chọn 'không có' trên gắn kết. Tôi khá chắc chắn đó không phải là trường hợp của tôi bởi vì tôi đã có nó trong/usr/local/bin/và các công cụ khác trong đó hoạt động tốt (nó cũng không chạy từ những nơi khác hoặc như người dùng khác bao gồm cả root) .

$ which bbcolors 
/usr/local/bin/bbcolors 
$ ls -l /usr/local/bin/bbcolors 
[email protected] 1 nick staff 9751 Mar 30 19:09 /usr/local/bin/bbcolors 

Đó là tập lệnh Perl không phải là tệp nhị phân được biên dịch, không phải là vấn đề. Dưới đây là một số thông tin bổ sung cho những gì nó có giá trị:

$ cat /usr/local/bin/bbcolors |head -n 1 
#!/usr/bin/env perl 
$ which perl 
/usr/bin/perl 
$ env | grep PATH 
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin 
+1

Bạn đã bao quát hầu hết các cơ sở bình thường cho những gì có thể xảy ra; làm tốt. Điều gì sẽ xảy ra khi bạn chạy 'perl -v'? Điều gì sẽ xuất hiện sau dòng bình luận đầu tiên trong kịch bản Perl ('bbcolors')?Ngoài ra, '@' sau các điều khoản có nghĩa là có một số thông tin thuộc tính auxilliary cho tệp; bạn đã điều tra rằng đó là (có lẽ với 'ls - @')? –

+0

Tôi giải quyết vấn đề với 'xattr -r com.apple.quarantine/file/path' Tôi sẽ trả lời câu hỏi của riêng tôi nhưng tôi không có đủ đại diện để làm điều đó trong vài giờ. – Nick

+0

'xattr -d com.apple.quarantine/usr/local/bin/bbcolors'? ('-r' có nghĩa là 'đệ quy';' -d' có nghĩa là 'xóa'.) Tôi tiếp tục quên lệnh gọi đó là gì. –

Trả lời

47

Cậu tình cờ mở/lưu các tập tin trong TextEdit?

Điều đó có thể giới thiệu siêu dữ liệu tệp (thuộc tính cách ly) leading to the symptom you describe.

Hãy thử:

xattr -l /usr/local/bin/bbcolors 

xattr -d com.apple.quarantine /usr/local/bin/bbcolors 

nếu bạn thấy các thuộc tính kiểm dịch.

+3

Vâng, tôi không thể trả lời câu hỏi của riêng tôi, nhưng bạn đã có thông tin đúng trong các nhận xét của tôi ở trên. FWIW: nó cũng đáng để thực hiện một 'ls -al @' trên tập tin để xem 'com.apple.quarantine'. – Nick

+2

Ha. Tôi đã tìm thấy giải pháp * mà không * đọc nhận xét của bạn. Điều đó sẽ dạy tôi làm mới thường xuyên hơn. – pilcrow

+0

Điều này giải quyết được vấn đề của tôi, nhờ –

1
-bash: /usr/local/bin/bbcolors: /usr/bin/env: bad interpreter: Operation not permitted 

Liệu /usr/bin/env tồn tại? Bạn điều hành nó được không? Chạy tự nó nên đổ biến môi trường của bạn để stdout.

Bạn có thể yên tâm thay thế:

#!/usr/bin/env perl 

Với đường dẫn đầy đủ đến perl nhị phân của bạn lựa chọn, ví dụ:

#!/usr/bin/perl 
12

pilcrow là đúng, tuy nhiên tôi chú ý đến một thực tế rằng nếu bạn đang làm việc với một hình ảnh đĩa, vấn đề có thể rất khó hiểu, như là thuộc tính com.apple.quarantine dường như được kế thừa từ tệp hình ảnh đĩa vào các tệp bên trong (nhờ febeling at Apple dev forums để nhận thấy điều đó!).

Để giải quyết vấn đề, bạn phải gỡ bỏ thuộc tính kiểm dịch từ ảnh đĩa:

xattr -d com.apple.quarantine /path/to/disk/image 

và sau đó đẩy và đi ngược lại hình ảnh đĩa. Sau đó, các tập tin của bạn sẽ được sạch sẽ một lần nữa.

+1

+1 Cảm ơn! Bạn đã cứu ngày của tôi. – ilmiacs

+1

+1 Cảm ơn! Lưu ngày của tôi quá! –

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