Você tentou?
Veja a diferença entre
echo 'ls' | sh -s
e
( echo 'ls'; cat ) | sh -s
ou
{ echo 'ls'; cat; } | sh -s
Aqui, sh -s
iniciará uma sessão de shell que lê comandos para executar a partir da entrada padrão ( -s
).
No primeiro exemplo, o shell simplesmente executará ls
e sairá (já que não há mais entrada).
No segundo e terceiro exemplo, o shell executará ls
e aguardará até que não haja mais entrada. O fluxo de entrada para sh -s
foi gerado primeiro pelo comando echo
, mas, em seguida, cat
assumiu a função. O processo cat
será lido a partir da sessão do shell pai e passará os comandos pelo canal para sh -s
. Se você digitar ls
, ou qualquer outro comando (não haverá nenhum prompt para digitá-lo em), o shell executará esses comandos.
Isso continuará até que você termine o processo cat
pressionando Ctrl + D em uma linha vazia para sinalizar o final da entrada.
Eu acredito que é isso que você quer dizer com "manter o tubo aberto".