qual bash está executando?

4

Eu acho que configurei o bash como shell, mas por que isso está acontecendo?

Meu shell é bash:

# ls -al 'which sh'
  lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash 

Erro ao executar um script com sh

# sh ubuntu/util.sh
  ubuntu/util.sh: line 32: 'test-build-release': not a valid identifier

Nenhum erro do bash

# bash ubuntu/util.sh
    
por Assen Kolov 12.07.2016 / 09:43

1 resposta

13

Ele está executando o executável bash que você espera, mas seu shell não é simplesmente bash; é bash em execução no modo de compatibilidade POSIX sh . Ele faz isso observando o nome do comando para o qual foi chamado e, se for sh , ativará automaticamente o modo POSIX. Ele faz um trabalho muito ruim nisso, e não deve ser totalmente confiável para testar scripts compatíveis com POSIX sh , mas deve restringir consideravelmente a sintaxe permitida.

--posix

Change the behavior of bash where the default operation differs from the POSIX standard to match the standard (posix mode). See SEE ALSO below for a reference to a document that details how posix mode affects bash's behavior.

E a partir do link :

Starting Bash with the --posix command-line option or executing set -o posix while Bash is running will cause Bash to conform more closely to the POSIX standard by changing the behavior to match that specified by POSIX in areas where the Bash default differs.

When invoked as sh, Bash enters POSIX mode after reading the startup files.

    
por 12.07.2016 / 09:49

Tags