mount está adicionando um sinalizador de quarentena, causando: / bin / bash: intérprete inválido: operação não permitida - mas não os suspeitos comuns

8

OK, estou tendo um problema semelhante ao: -bash: Applications / mvim: / bin / sh: bad intérprete: Operação não permitida - mas não é o mesmo problema. Estou obtendo o mesmo resultado.

Eu já verificado que é não a bandeira com.apple.quarantine.

É não o final de linha (roteiro foi criado apenas a partir vi). Eu posso executar o script usando:

bash simpleshell.sh

Aqui estão os resultados:

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$ 

ATUALIZAÇÃO: Não acredito que seja o sistema de arquivos montado como noexec. Eu tentei executar o script em 3 lugares diferentes: / tmp, ~ e / source.

UPDATE2: Ok, depois de mais pesquisas - criei o script dentro / source, que é um dmg montado. Foi aí que corri o xattr -l e não encontrei nada. Quando copiei o script para ~ e executei o xattr -l, ele tinha o xattr com.apple.quarantine. Em um palpite, observei os atributos de montagem para / source e encontrei:

/dev/disk1s9 on /Volumes/code (hfs, local, nodev, nosuid, journaled, noowners, quarantine, mounted by kylar)

Então, quando eu monto este dmg, ele está sendo definido como quarentena. Como posso dizer ao mount para não montá-lo com o sinalizador de quarentena? Depois que removi a flag em ~, o script correu bem.

Kylar
fonte
Se você não obtiver sua resposta aqui, considere perguntar no UNIX e Linux SE.
Max Ried
I pode apenas cross-postá-lo de qualquer maneira - isto é, basicamente, me impedindo de obter qualquer trabalho feito :(
Kylar
Você é capaz de executar outros programas no mesmo sistema de arquivos de maneira semelhante? Isso está usando chmod +x file.sh; ./file.sh. Talvez esse sistema de arquivos esteja montado com o sinalizador "noexec".
cm2
2
Pode ser útil reescrever sua pergunta para perguntar apenas como dizer ao mount para não usar o sinalizador de quarentena, pois agora você determinou que esse era seu problema real. Além disso, não sei como desabilitá-lo para um volume específico, mas desabilitar a quarentena completamente defaults write com.apple.LaunchServices LSQuarantine -bool NO.
houbysoft 19/09/12
2
OK, eu resolvi isso. Havia um xattr com.apple.quarantine definido no arquivo .dmg. Eu tive que desmontá-lo, limpar o xattr e remontar o dmg. GAH. @houbysoft: obrigado pela dica de desativá-lo totalmente.
Kylar

Respostas:

1

O script estava sendo executado de dentro de um .dmg que tinha o sinalizador de quarentena definido. Quando o .dmg foi montado, ele foi montado com um sinalizador de quarentena que é herdado, mas não aparece. Desmontei o .dmg, removi a bandeira de quarentena e montei-a novamente, e tudo estava bem.

Kylar
fonte
Obrigado por isso. Eu tive um problema semelhante, e isso estava me deixando louco: um script Perl, criado por Vim (ou mesmo gato), sem nenhum xattr de quarentena associado a ele. No entanto, o script residia em um pacote esparso montado. Depois de ler esta página, desmontei o sistema de arquivos e procurei dentro do pacote: Havia um arquivo chamado "token" que tinha o conjunto xattr "com.apple.quarantine". Depois de excluir o xattr e remontar o sistema de arquivos dos pacotes esparsos, meu problema de "mau intérprete" com o script Perl desapareceu.
Lee Johnson
0

Eu tenho uma solução simples: cat configure.sh> test.sh e execute test.sh.

É um problema do editor: https://discussions.apple.com/thread/3733470?start=30&tstart=0

sihong xie
fonte
Não, não é uma solução para a minha situação. Enquanto a pergunta diz, eu estava usando o vi para criar os scripts. Esse é um link interessante.
Kylar