testing para opção no bash não está funcionando bem

0

Eu estava tentando testar a opção noclobber usando: if [ -o noclobber ] mas ela não transformou nada.

Eu configurei a opção noclobber usando: set +o noclobber .

prompt> cat checkoption.sh
#!/bin/bash
if [ -o noclobber ]
     then
          echo "Option is on."
fi
prompt>
prompt> set +o noclobber
prompt> set -o | grep noglobber
noclobber       on
prompt> ./checkoption.sh
prompt>

Alguma ideia de por que não recebo uma mensagem aqui?

    
por pigeon 28.01.2018 / 07:30

1 resposta

2

As opções de shell não são herdadas entre as sessões de shell e você está lidando com duas sessões de shell aqui:

  1. A sessão interativa em que você define sua opção de shell e
  2. A sessão do script de shell na qual você testa a opção.

O script de shell nunca detectará que a opção foi definida na sessão do shell interativo de chamada.

Soluções:

  1. Transforme seu código em uma função shell (por exemplo, em $HOME/.bashrc ):

    checknoclobber () { [ -o noclobber ] && echo 'Noclobber is on'; }
    

    Ou, para o caso genérico,

    checkoption () {
        if [ -o "$1" ]; then
            printf '%s is set\n' "$1" >&2
            return 0
        else
            printf '%s is not set (or invalid option name)\n' "$1" >&2
            return 1
        fi
    }
    
  2. Defina a opção no script.

  3. Origem do arquivo de script no shell interativo com source ou com o comando . .

por 28.01.2018 / 08:18

Tags