Erro de sintaxe: “(” inesperado (palavra esperada) - no meu script bash

1

Eu tenho um script bash:

#!/bin/bash

VAR1="var1"
VAR2="var2"
VAR3="var3"

cat ${VAR1} \
    <(echo -e '<something>') \                       # <--------- here's the error
    ${VAR2}/file123.txt \
    <(echo -e '</something>\n<something2>') \
    ${VAR3}/file456.txt \
    <(echo -e '</something2>')

Quando eu executo: sh my_script.sh , recebo o erro:

 my_script.sh: 9: Syntax error: "(" unexpected (expecting word)

atualização:

bash não foi encontrado, "/ bin / bash" não existe. nem bash faz.

    
por Kurama 22.11.2016 / 11:59

2 respostas

3

Tente:

chmod 755 "my_script.sh"

Em seguida, execute-o simplesmente assim

my_script.sh

A linha #!/bin/bash no início é usada para informar ao seu sistema com qual shell você deve executar o script. Acho que você está ignorando isso, executando com sh my_script.sh . Você também pode escrever explicitamente /bin/bash my_script.sh . Além disso, se você tiver alguma sintaxe específica de bash em seu script, considere alterar a extensão para .bash para ser mais explícita.

EDITAR

Você não parece ter bash na sua distribuição do FreeBSD (o shell padrão no FreeBSD parece ser tcsh ). Você pode encontrar aqui um tutorial para instalar o bash no FreeBSD. A solução que eu forneci deve funcionar corretamente. Boa sorte.

    
por 22.11.2016 / 14:25
3

Obviamente, do script, esse script deve ser executado por bash não sh (mesmo que a sintaxe pareça mais com zsh de sintaxe por causa das variáveis sem aspas).

Você desejará executá-lo com bash ou zsh . Se esses shells não estiverem disponíveis, você poderá instalá-los ou, como alternativa, traduzir esse script para sh syntax, que deve ser simples aqui.

A linguagem sh (Bourne ou POSIX) não possui nenhum operador <(...) . Isso vem de ksh e é suportado por bash e zsh também. echo -e não é padrão e mesmo com bash e ksh só funciona em alguns ambientes.

O equivalente padrão sh seria:

var1="var1"
var2="var2"
var3="var3"

cat < "$var1" || exit
printf '<something>\n' || exit
cat < "$var2/file123.txt" || exit
printf '</something>\n<something2>\n' || exit
cat < "$var3//file456.txt" || exit
print '</something2>\n'
    
por 22.11.2016 / 18:08