Na expressão
r='vx $* < \'tty\' > \'tty\''
O Bash interpreta vx como um nome de arquivo executável para o qual você passa todos ( $* ) dos argumentos passados para o script atual após a expansão do shell. Por exemplo, se os argumentos para o script forem * 'ls /dev' , a lista de argumentos passada para vx será o nome de todos os arquivos no diretório atual, além dos nomes de todos os arquivos em /dev . O número de argumentos será o mesmo que o número de nomes de arquivos.
vx é assumido para aceitar entrada em sua entrada padrão.
tty é um executável que retorna uma string que o Bash interpreta como um nome de arquivo.
Observe que a primeira chamada de tty poderia retornar um nome de arquivo diferente da segunda invocação ', por exemplo, se tty produzir o nome do arquivo com base em alguma condição externa, como o conteúdo do arquivo com o nome produzido pelo invocação anterior ou com base em um registro de data e hora ou outra condição externa que pode mudar.
A expressão r='...' atribui a saída padrão do comando backticked a r . O valor de retorno da expressão retrocedida está em $? .
Como a saída padrão de vx é redirecionada para o nome do arquivo produzido pela segunda chamada de tty , o valor de r sempre estará vazio ( r= ), que é o mesmo que r=0 em a expressão [[ r -ne 0 ]] . O resultado é que não há situação em que o loop possa ser executado mais de uma vez.