mount добавляет флаг карантина, вызывая: / bin / bash: плохой интерпретатор: операция недопустима - но не для обычных подозреваемых

8

ОК, у меня возникла проблема, аналогичная: -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 не монтировать его с флагом карантина? Как только я убрал флаг в ~, скрипт работал нормально.

Кайлар
источник
Если вы не получили здесь ответ, рассмотрите вопрос о UNIX и Linux SE.
bot47
В любом случае, я могу просто сделать кросс-пост - это, в основном, мешает мне выполнять какую-либо работу :(
Kylar
Можете ли вы запускать другие программы в той же файловой системе аналогичным образом? Это использует chmod +x file.sh; ./file.sh. Может быть, эта файловая система смонтирована с флагом «noexec».
см2
2
Может быть полезно переписать ваш вопрос, чтобы спросить только о том, как указать mount, чтобы он не использовал флаг карантина, поскольку теперь вы определили, что это ваша настоящая проблема. Кроме того, я не знаю, как отключить его для определенного тома, но вообще отключить карантин defaults write com.apple.LaunchServices LSQuarantine -bool NO.
Houbysoft
2
ОК, я решил это. В файле .dmg установлен набор com.apple.quarantine xattr. Мне пришлось размонтировать его, очистить xattr, а затем перемонтировать dmg. GAH. @houbysoft: спасибо за совет, как полностью его отключить.
Килар

Ответы:

1

Сценарий запускался изнутри .dmg, на котором был установлен флаг карантина. Когда монтировался .dmg, он монтировал его с флагом карантина, который наследуется, но не отображается. Я размонтировал .dmg, удалил флаг карантина и снова установил его, и все было хорошо.

Кайлар
источник
Спасибо тебе за это. У меня была похожая проблема, и она сводила меня с ума: сценарий Perl, созданный Vim (или даже cat), без карантинного xattr, связанного с ним. Однако скрипт находился в смонтированном разреженном комплекте. Прочитав эту страницу, я размонтировал файловую систему и заглянул внутрь пакета: там был файл с именем «token», в котором был установлен «com.apple.quarantine» xattr. Как только я удалил xattr и перемонтировал файловую систему разреженного пакета, моя проблема «плохого интерпретатора» со скриптом Perl исчезла.
Ли Джонсон
0

У меня есть простое решение: cat configure.sh> test.sh, затем запустите test.sh.

Оказывается, проблема с редактором: https://discussions.apple.com/thread/3733470?start=30&tstart=0

Сихонг Се
источник
Нет, это не решение для моей ситуации. Поскольку вопрос читает, я использовал vi для создания сценариев. Это интересная ссылка, хотя.
Кайлар