Existe alguma opção de bash com a qual é invocada?

4

Eu encontro que o shell padrão que eu uso quando eu inicio o Terminal (com Ctrl + Alt + T ) é /bin/bash .

E executando o comando interno type em bash como:

type -p bash

retorna o resultado como:

/bin/bash

Sugerindo que o mesmo executável seja executado quando eu fizer Ctrl + Alt + T ou dizer bash .

Este shell é o mesmo que uma invocação do comando bash com algumas de suas opções passadas para certo? Se sim, quais são essas opções?

Como exemplo, talvez a opção -i seja passada para tornar o bash shell interativo?

PS: Talvez também está relacionado, mas não consigo juntar todas as peças aqui.

    
por Slothworks 13.08.2015 / 09:33

1 resposta

8

Normalmente, não, o terminal não passa nenhuma opção para bash . O bash , no entanto, assume um conjunto de opções padrão dependendo de como ele foi chamado. De man bash , seção INVOCATION :

An interactive shell is one started without  non-option  arguments  and
without the -c option whose standard input and error are both connected
to terminals (as determined by isatty(3)), or one started with  the  -i
option.   PS1 is set and $- includes i if bash is interactive, allowing
a shell script or a startup file to test this state.

Um shell interativo ativa ainda outras opções. Além disso, alguns padrões se aplicam com base no nome da chamada ( sh vs bash ). Lendo em (seção sobre set ):

-h      Remember  the location of commands as they are looked up
        for execution.  This is enabled by default.
-m      Monitor mode.  Job control is enabled.  This  option  is
        on  by  default  for  interactive shells on systems that
        support it (see JOB CONTROL above)
-B      The  shell performs brace expansion (see Brace Expansion
        above).  This is on by default.
-H      Enable !  style history substitution.  This option is on
        by default when the shell is interactive.

Combinado, basta invocar bash em um terminal para ativar essas opções.

Você pode confirmar isso verificando o valor da variável $- special:

$ echo $-
himBH

Uma opção adicional que talvez seja definida é se o seu terminal estiver configurado para iniciar os shells de login. Nesse caso, -l é explicitamente passado pelo terminal como uma opção.

    
por muru 13.08.2015 / 09:56