Piping dados para stdin de um processo sem causar EOF depois

28

Eu tenho um executável que inicia um shell interativo pelo usuário. Eu gostaria de, após o lançamento do shell, injetar alguns comandos primeiro, 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 quando é feito 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 em stdin sem causar um EOF depois?

    
por Jason R 05.12.2013 / 18:14

2 respostas

35

Encontrou essa resposta inteligente em uma pergunta semelhante em stackoverflow

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

Isso faz o truque. cat irá bombear a saída de echo para o fluxo de entrada de shell_executable e aguardar por mais entradas até EOF.

    
por 05.12.2013 / 19:17
17

A maneira mais limpa de fazer isso é procurar algo como bash ' --rcfile option. Coloque seus comandos personalizados em seu arquivo personalizado e passe para o shell interativo para ser executado na inicialização.

Se não houver essa opção, você também pode tentar o seguinte:

cat custom_commands_file - | ./shell_executable

cat interpretará - como stdin.

    
por 05.12.2013 / 19:10