2012-03-31 24 views
24

próbuję uruchomić ten skrypt na Mac OS 10.7 (Lion) i dostaję błąd:Mac OS:/usr/bin/env: bad interpreter: Operacja niedozwolona

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

I z powodzeniem uruchomić ten skrypt na innych komputerach Mac. To tylko this script pobrane i niezmodyfikowane z gry Daring Fireball.

Znalazłem this person z bardzo podobnym problemem, ale przyjęta odpowiedź brzmiała, że ​​system plików miał opcję "noexe" na górze. Jestem prawie pewien, że tak nie jest w przypadku mnie, ponieważ właśnie dostałem go w/usr/local/bin/i inne rzeczy tam działa dobrze (nie działa również z innych miejsc lub innych użytkowników, w tym 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 

Jest to skrypt Perla, nie skompilowany plik binarny, nie to powinno mieć znaczenie. Oto kilka dodatkowych informacji na co warto:

$ 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

Zaspokoiłeś większość normalnych podstaw, by dowiedzieć się, co może być nie tak; dobra robota. Co się stanie, gdy uruchomisz 'perl -v'? Co pojawia się po początkowych liniach komentarza w skrypcie Perla ('bbcolors')?Również "@" po uprawnieniach oznacza, że ​​istnieje jakiś pomocniczy atrybut informacji dla pliku; czy to zbadałeś (być może z 'ls - @')? –

+0

Rozwiązałem problem za pomocą 'xattr -r com.apple.quarantine/file/path' Odpowiem na własne pytanie, ale nie mam wystarczającej liczby przedstawicieli, aby to zrobić przez kilka godzin. – Nick

+0

'xattr -d com.apple.quarantine/usr/local/bin/bbcolors'? ('-r' oznacza 'rekursywny';' -d' oznacza 'delete'.) Ciągle zapominam, co to polecenie jest wywoływane. –

Odpowiedz

47

Czy zdarzy ci się otworzyć/zapisać plik w TextEdit?

Może to wprowadzić metadane systemu plików (atrybut kwarantanny) leading to the symptom you describe.

Spróbuj:

xattr -l /usr/local/bin/bbcolors 

i

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

jeśli widzisz atrybut kwarantanny.

+3

Tak, nie mogłem odpowiedzieć na własne pytanie, ale masz odpowiednie informacje z moich powyższych komentarzy. FWIW: warto też zrobić plik 'ls -al @' na pliku, aby zobaczyć "com.apple.quarantine". – Nick

+2

Ha. Znalazłem to rozwiązanie * bez * czytania twoich komentarzy. To nauczy mnie częstszego odświeżania. – pilcrow

+0

To rozwiązało mój problem, dziękuję –

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

Czy /usr/bin/env istnieje? Czy możesz to uruchomić? Uruchom sam, powinien zrzucić swoje zmienne środowiskowe na standardowe wyjście.

Można bezpiecznie wymienić:

#!/usr/bin/env perl 

z pełną ścieżką do perl binarnego wyboru, np:

#!/usr/bin/perl 
12

pilcrow jest poprawne, jednak ja zwrócić uwagę na fakt, że jeśli pracujesz z obrazu dysku, problem może być bardzo mylące, jako atrybut com.apple.quarantine wydaje się być dziedziczone z pliku obrazu dysku do plików wewnątrz (dzięki febeling at Apple dev forums za zauważenie tego!).

Aby rozwiązać ten problem, trzeba usunąć atrybut kwarantanny z obrazu dysku:

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

a następnie wysunąć i zamontować obraz dysku. Wtedy twoje pliki będą znów czyste.

+1

+1 Dzięki! Uratowałeś mi dzień. – ilmiacs

+1

+1 Dzięki! Uratowałem też mój dzień! –

Powiązane problemy