Só para dizer na frente: estou ciente de que a maioria dos programas que possuem um prompt interativo também tem algum tipo de arquivo de inicialização ou a capacidade de definir um sinalizador de comando que executará algo e então deixá-lo no prompt interativo. No entanto, estou interessado na solução no nível do shell.
Digamos que eu tenha um comando xyz
que eu execute a partir de um shell, e ele assuma o meu terminal e me forneça um prompt interativo no qual posso executar comandos terminados de nova linha.
Digamos que eu tenha dois comandos (duas linhas) que quero executar no início da minha sessão interativa, sempre que executo xyz
.
Se essas duas linhas fossem os comandos somente que eu queria executar, é claro que eu poderia simplesmente executar:
printf '%s\n' 'first command' 'second command' | xyz
Ou, como alternativa, se eu tivesse vários comandos para executar, mas conheço todos eles com antecedência, poderia colocá-los todos em um arquivo e executá-los:
xyz < commands-file.txt
No entanto, se eu quiser obter um prompt interativo padrão, com o mesmo resultado exato se eu digitasse xyz
e depois digitasse manualmente em first command
e second command
... Existe uma maneira de fazer isso no shell (por exemplo, em uma função de shell) usando o redirecionamento?
As soluções aparentes óbvias, como sed -e '1ifirst command' -e '1isecond command' | xyz
, não funcionam, porque xyz
pode detectar que a entrada não está vindo de um terminal ou porque a saída sed
está armazenada em buffer; não tenho certeza qual.
Tags shell io-redirection