erro de sintaxe próximo ao token inesperado ''

4

Estou escrevendo um script para ler a saída de um comando para as variáveis a e b. Este é o script

#!/bin/bash

read a b < <(awk '/Application Server/ && !seen[$7]++{printf "%s ", $7}' /tmp/ServerState)

echo "The value of a is $a"
echo "The value of b is $b"

e obtendo o erro de sintaxe como:

line 3: syntax error near unexpected token '<'
line 3: 'read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)'

Mas quando estou digitando o mesmo comando no console, ele está funcionando sem problemas.

app@user:/tmp> read a b < <(awk '/Application Server/ && !seen[$7]++{printf "%s ", $7}' /tmp/ServerState)
app@user:/tmp> echo $a
FAILED
app@user:/tmp> echo $b
STARTED

Qualquer ajuda sobre isso é muito apreciada.

    
por Sudev Jash 17.11.2014 / 18:28

3 respostas

7

sh (que na maioria dos sistemas (derivados do Debian) está ligado a dash ) não permite substituição de processos . Tente invocar por bash script.sh . A mesma chamada por ./script.sh é executada com sha-bang , que é /bin/bash em seu script.

    
por 17.11.2014 / 19:28
0

Eu estava tentando invocar o script como sh file.sh e estava recebendo o erro. Mas quando invoquei o mesmo script como ./file.sh e bash file.sh, ele está funcionando e fornecendo o resultado desejado.

    
por 17.11.2014 / 19:29
-1

Além disso, você pode adicionar a linha abaixo no topo do seu script:

#!/bin/bash

Ele diz ao seu terminal / console para executar seu script como script bash, e que a sua substituição de processo " <( cmd ) " funcionará bem.

    
por 29.01.2018 / 16:27