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
whileloop 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.