A maioria dos shells parecidos com Bourne, exceto zsh
e ksh
, executam cada parte de pipelines em subshells. Supondo que você não use zsh
ou ksh
, então, no seu script, a última parte do pipiline foi executada em subshell, portanto exit
encerra essa sub-shell em vez do shell atual.
Você receberá o resultado desejado em zsh
ou ksh
.
De qualquer forma, esses códigos têm muitas falhas:
- UUOC
- Usando
while
loop para processar texto - Esquecendo as variáveis de aspas duplas
Se tudo o que você deseja é obter o primeiro caractere no arquivo:
dd bs=1 count=1 if=/etc/passwd 2>/dev/null
ou com o GNU dd
:
dd status=none bs=1 count=1 if=/etc/passwd
Funciona apenas com caracteres ASCII. Para caracteres de multibyte:
LC_ALL=en_US.utf8 awk '{print substr($0,1,1);exit}'
Altere LC_ALL
para qual localidade seu texto pertence.