ОК, у меня возникла проблема, аналогичная: -bash: Applications / mvim: / bin / sh: плохой интерпретатор: операция не разрешена, но это не та же проблема. Я получаю тот же результат.
Я уже убедился, что это не флаг com.apple.quarantine.
Это не конец строки (скрипт был создан только из vi). Я могу выполнить скрипт, используя:
bash simpleshell.sh
Вот результаты:
fawkes:tmp kylar$ vi simpleshell.sh
fawkes:tmp kylar$ chmod +x simpleshell.sh
fawkes:tmp kylar$ ./simpleshell.sh
-bash: ./simpleshell.sh: /bin/bash: bad interpreter: Operation not permitted
fawkes:tmp kylar$ cat simpleshell.sh
#!/bin/bash
export FOO=Hey
echo $FOO
fawkes:tmp kylar$ which bash
/bin/bash
fawkes:tmp kylar$ bash simpleshell.sh
Hey
fawkes:tmp kylar$ xattr -l simpleshell.sh
fawkes:tmp kylar$
ОБНОВЛЕНИЕ: я не верю, что файловая система монтируется как noexec. Я пробовал запускать скрипт в 3 разных местах: / tmp, ~ и / source.
ОБНОВЛЕНИЕ2: Хорошо, после дополнительной копки - я создал скрипт внутри / source, который является смонтированным dmg. Вот где я запустил xattr -l и ничего не нашел. Когда я записал скрипт в ~ и запустил xattr -l, у него был com.apple.quarantine xattr. По догадкам я посмотрел атрибуты монтирования для / source и обнаружил:
/dev/disk1s9 on /Volumes/code (hfs, local, nodev, nosuid, journaled, noowners, quarantine, mounted by kylar)
Поэтому, когда я монтирую этот dmg, он становится карантином. Как я могу сказать mount не монтировать его с флагом карантина? Как только я убрал флаг в ~, скрипт работал нормально.
chmod +x file.sh; ./file.sh
. Может быть, эта файловая система смонтирована с флагом «noexec».
defaults write com.apple.LaunchServices LSQuarantine -bool NO
.