Por que eu obtenho [[: não encontrado ao executar um script?

14

Estou tentando escrever um script que precisa verificar se existe um arquivo. No console eu escrevo

if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

e eu recebo

not mod

mas quando eu escrevo um script para fazer a mesma coisa:

#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

e, em seguida, executar o script, eu recebo isso:

./ex.sh: 2: [[: not found
mod

Salvei o script no diretório atual e o nomeei ex.sh, depois me certifiquei de que ele é executável. Para chamar o script, faço isso:

./ex.sh

Por que estou recebendo esse problema? Eu já tentei muitas coisas:

if [ -a /home ...

e

if test -a /home ...

Ambos retornam

13: -a: unexpected operator
    
por Buzu 04.01.2012 / 07:01

2 respostas

9

Você está executando um script escrito para bash em sh , que não possui muitos dos recursos de sintaxe estendidos - [[ é um comando bash builtin e não é disponível em sh .

Altere #!/bin/sh para #!/bin/bash ou para #!/usr/bin/env bash .

    
por 04.01.2012 / 09:54
0

Especifique o bash em vez de sh ao executar o script. Eu pessoalmente notei que eles são diferentes no Ubuntu 12.10:

bash script.sh arg0 ... argn

    
por 13.12.2014 / 12:43