Receber uma mensagem 'Permission denied' ao verificar a regex por meio do shell script

2

Verifique o seguinte script de shell:

#!/bin/bash
check=yes
if [[ $check =~ yes|no ]]; then
    echo yes or no.
else
    echo I did not understood the pattern.
fi

Em execução no meu OSX, tudo funciona conforme o esperado. Apenas me jogue a mensagem yes or nor. . Mas quando uma corrida no servidor, um Ubuntu 14.04.5 LTS, tem um erro:

teste.sh: 3: teste.sh: [[: Permission denied
teste.sh: 3: teste.sh: no: Permission denied
I did not understood the pattern.

Já verifiquei a versão do shell do OSX e do Ubuntu. O OSX envia uma versão mais antiga do shell:

[email protected]:/tmp/>$SHELL --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Copyright (C) 2007 Free Software Foundation, Inc.

Enquanto no Ubuntu:

t4h@web129:~$ $SHELL --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Para mim, as informações da shell não foram muito esclarecedoras.

Existe uma maneira diferente de verificar o regex no shell que será executado igualmente através de qualquer sistema * nix e compatível com diferentes versões do shell?

    
por danilocgsilva 03.09.2017 / 22:32

1 resposta

2

Este é um script bash que requer que bash seja usado como intérprete.

Quando você executa com sh , não está usando bash . Sim, alguns sh são realmente bash disfarçados, mas isso não importa (não se comportará como "normal" bash em todas as circunstâncias). Tratar sh e bash como intérpretes mutuamente exclusivos, como se fossem perl e python (ou seja, não tente misturá-los).

Execute o script com

$ bash teste.sh

ou torná-lo executável e executá-lo diretamente:

$ chmod +x teste.sh
$ ./teste.sh

Esta última maneira de fazer isso pode ser preferível. Isso permite que o script decida, por meio de sua #! -line, qual interpretador deve ser usado.

    
por 03.09.2017 / 23:14