Como descobrir a sintaxe correta da String para o meu bash?

1

Estou recebendo uma mensagem de erro para esse alias:

alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''

E aqui está a mensagem de erro:

-bash: .bashrc: line 15: syntax error near unexpected token '('
-bash: .bashrc: line 15: 'alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'''

Eu tenho muitos apelidos lá, mas não consigo entender essa mensagem! Encontrei muitos sites com muitas sugestões diferentes da sintaxe da String.

Eu estou no OS X Mavericks (10.9.3).

Minha pergunta é:

How to find out my bash version, and depending on that, the right syntax for my bash files?

    
por Bastian Gruber 27.05.2014 / 17:31

2 respostas

2
bash --version

alias ejectall=$'osascript -e \'tell application "Finder" to eject (every disk whose ejectable is true)'\'
    
por 27.05.2014 / 17:43
2

O problema é a sua cotação - e é irrelevante qual versão do bash você tem (embora você possa executar bash --version ou echo "$BASH_VERSION" para descobrir). Essas regras de cotação não mudaram.

' -quotes são simples. Eles apenas citam até o próximo ' . Então, no seu exemplo:

alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''
               ^             ^ 
            start           end

Em outras palavras, começar com "tell application" não é citado para o shell.

Você poderia fazer:

alias ejectall='osascript -e '\''tell application "Finder" to eject (every disk whose ejectable is true)'\'

Basicamente, isso termina a string entre aspas, coloca uma aspa simples (com \' ) e, em seguida, inicia uma nova string entre aspas. As strings citadas adjacentes são mescladas, já que não há espaço. Você pode ver:

$ echo 'I'\''ll work'
I'll work

Sua outra opção é usar " -quotes, então você precisa escapar de outras aspas duplas com \" e também escapar de cifrões com \$ .

$ echo "That \"is\" \.00."
That "is" $3.00.

Ou, como aponta Hauke Laging em sua resposta, você pode usar $' -strings do Bash. Aqueles permitem várias seqüências de escape dentro de uma string '', incluindo \' .

Tudo isso está detalhado na seção "Cotação" na manpage bash.

    
por 27.05.2014 / 17:49

Tags