Eu tenho um executável que inicia um shell interativo do usuário. Eu gostaria de, após o lançamento do shell, injetar alguns comandos primeiro e depois permitir que o usuário tenha sua sessão interativa. Eu posso fazer isso facilmente usando echo
:
echo "command 1\ncommand 2\ncommand3" | ./shell_executable
Isso quase funciona. O problema é que o comando echo que está alimentando o stdin do processo atinge o EOF assim que termina ecoando meus comandos. Esse EOF faz com que o shell seja encerrado imediatamente (como se você tivesse pressionado Ctrl + D no shell).
Existe uma maneira de injetar esses comandos no stdin sem causar um EOF depois?
shell-script
pipe
stdin
Jason R
fonte
fonte
./shell_executable
ao final da lista de comandos? Isso pode continuar, embora você tenha duas instâncias em execução (pai e filho).Respostas:
Encontrei essa resposta inteligente em uma pergunta semelhante no stackoverflow
(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable
Isso faz o truque.
cat
bombeará a saída doecho
fluxo de entrada do shell_executable e aguardará mais entradas até o EOF.fonte
cmd 1
escrito de volta, mas não percebeu que deveria ter sido o / p gerada porcmd 1
A maneira mais limpa de fazer isso é provavelmente procurar algo como
bash
a--rcfile
opção. Coloque seus comandos personalizados em seu arquivo personalizado e passe-o para o shell interativo para executar na inicialização.Se essa opção não existir, você também pode tentar o seguinte:
cat
interpretará-
como stdin.fonte