Você está sendo assaltado pelo conceito usual, que tudo em um sistema Linux é um arquivo . Para ilustrar isso, coloquei seus comandos em um arquivo chamado forever
, em seguida, encontrou o PID do processo, então
$ file /proc/25546/fd/*
/proc/25546/fd/0: symbolic link to `/dev/pts/12'
/proc/25546/fd/1: symbolic link to `/dev/pts/12'
/proc/25546/fd/2: symbolic link to `/dev/pts/12'
/proc/25546/fd/255: symbolic link to `/home/me/tmp/forever'
$ file /dev/pts/12
/dev/pts/12: character special
Isso mostra que seus descritores de arquivo 1,2,3 são arquivos de caractere. Agora, é bem conhecido (veja por exemplo esta resposta no Unix e no Linux ) naquela:
Os dispositivos de caracteres (também chamados de arquivos especiais de caracteres) se comportam como pipes, portas seriais, etc: escrever ou ler para eles é uma ação imediata. Mas o que o motorista faz com os dados é seu próprio negócio . A gravação de um byte em um dispositivo de caractere pode fazer com que ele seja exibido na tela, saída em uma porta serial, convertido em um som, ... Ler um byte de um dispositivo pode fazer com que a porta serial espere pela entrada, pode retornar um aleatório byte (/ dev / urandom), ...
Então você precisa de outra maneira de realizar o IPC (= Inter Process Communication). No Unix e no Linux , há pipes nomeados por esta. Modifique seu script da seguinte maneira:
#!/bin/bash
MYPIPE=/tmp/my_pipe
if [[ ! -p $MYPIPE ]]; then
mkfifo $MYPIPE
fi
while true
do
if read line <$pipe; then
if [[ "$line" == 'quit' ]]; then
break
fi
echo $line >> /tmp/debug.txt
fi
done
echo "I quit"
Inicie o script; de outro tipo de terminal
$ cat > /tmp/my_pipe
My name is
George Washington
....
De um terceiro terminal, usando tail -f /tmp/debug.txt
, você verá o que acabou de digitar no segundo terminal, reaparecer /tmp/debug.txt
.
No Android , a situação é um pouco mais complexa, mas você vai encontrar Aqui e Aqui duas maneiras distintas em torno do problema de criar pipes nomeados em um dispositivo Android não enraizado (o primeiro é mais simples que o segundo).