Você está certo de que é incrivelmente mal documentado. Que documentação existe é bastante simples:
-t Exit after reading and executing one command.
O código-fonte bash está disponível aqui . Eu olhei para a versão 4.2. Os sinalizadores curtos manipulados pelo bash estão listados em flags.c
e na linha relevante:
{ 't', &just_one_command },
Portanto, -t
na linha de comando define a variável just_one_command
. Esta variável é usada em apenas um lugar: ocorre em uma condição if
no final de um loop em eval.c
:
if (just_one_command)
EOF_Reached = EOF;
Em outras palavras, se o -t
flag é dado, então, após o primeiro comando ser executado, a condição de final de arquivo é sinalizada e bash
é encerrado.
MAIS DETALHES
A partir de eval.c
, a execução da linha de comando em bash
parece ser controlada pela função reader_loop
:
reader_loop ()
{
int our_indirection_level;
COMMAND * volatile current_command;
USE_VAR(current_command);
current_command = (COMMAND *)NULL;
our_indirection_level = ++indirection_level;
while (EOF_Reached == 0)
{
int code;
code = setjmp_nosigs (top_level);
[ ... Much code removed ... ]
if (just_one_command)
EOF_Reached = EOF;
}
indirection_level--;
return (last_command_exit_value);
}
O loop dentro de reader_loop
continua até receber o sinal EOF_Reached
. O único efeito da opção -t
é definir esse sinalizador no final do loop, garantindo que o loop seja executado apenas uma vez.