Hoje eu estava lendo a documentação do set
, quando percebi que minha variável flags ( $-
) continha uma flag não documentada na página de ajuda ( help set
) e noGNU.org: i
.
Depois de algum tempo consegui encontraresta páginaque afirma que i
significainterativo.
A primeira coisa que tentei, claro, foi desligá-lo.
Depois de executado set +i
, $-
não continha mais um i
, mas fora isso, aparentemente tudo ainda estava funcionando como sempre.
Da mesma forma, inserir set -i
um arquivo de script não teve efeito aparente ao executá-lo.
Então, minha pergunta: colocar set -i
/ set +i
inserir um script ou executá-lo na linha de comando realmente tem algum efeito além de modificar a $-
variável?
Responder1
Aparentemente, a única consequência de usar set -i
ou set +i
na linha de comando depois que o shell for inicializado é alterar o valor de $-
. A -i
opção pode ser usada de forma significativa apenas ao invocar bash
para criar um shell, caso em que forçará o shell a ser interativo.
Um rápido exame da fonte bash mostra que as verificações interativas durante a execução referem-se à variável global interactive
, que é definida durante a sequência de inicialização e depois não modificada. Somente set [+-]i
e $-
use o forced_interactive
global. ( interactive
será definido como verdadeiro se forced_interactive
estiver definido ou conforme descrito em man bash
.)
Responder2
bash-1.14.7-14 possui documentação para a opção -i na página de manual. https://bugzilla.redhat.com/show_bug.cgi?id=1129
-i If the -i option is present, the shell is interactive.
Um shell interativo lê comandos da entrada do usuário em um tty. Entre outras coisas, esse shell lê arquivos de inicialização na ativação, exibe um prompt e ativa o controle de tarefas por padrão. O usuário pode interagir com o shell. Um shell executando um script é sempre um shell não interativo.
Mais informações aqui:
http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/what-do-you-mean-by-interactive-shell
Adição: Mais links
Uma resposta realmente boa sobre shells sem login
https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells
O manual bash sobre shells interativos