{ echo "require('./myutils')" ; cat ; } | node
Esteja ciente de que seu ambiente REPL pode agir de maneira diferente ao receber entradas que não sejam de um terminal (por exemplo, o prompt pode não aparecer).
Gostaria de saber se é possível enviar alguns para o stdin de um comando e continuar lendo no terminal.
O problema que estou tentando resolver é executar algum código de inicialização toda vez que eu abro um REPL do Node.js, então eu tenho algumas funções disponíveis no REPL desde o início. Basicamente, para automatizar isso:
$ node
> require('./myutils')
> ... continue using the REPL
Eu agora eu posso usar aqui string para enviar algum texto para stdin do comando:
$ node <<<"require('./myutils')"
Isso executará meu código de inicialização, mas também fechará o REPL imediatamente depois disso.
Talvez exista outra solução para esse problema específico com o Node.js, mas gostaria de saber se há uma maneira geral de misturar a entrada de uma string ou arquivo e continuar lendo no terminal.
Atualização : a solução de Chris Down funciona, mas o REPL Node.js venceu não é executado no modo interativo por padrão (isso é esperado, já que não estamos lendo de um terminal). Felizmente, há uma opção -i
para forçar o modo interativo no terminal Node.js:
{ echo "require('./myutils')" ; cat ; } | node -i
Você pode usar o rlwrap (invólucro para o readline ) para interagir com um programa cujos recursos de interação não combinam com você.
rlwrap node
O Rlwrap não pode enviar a entrada inicial para o comando, mas chega perto: você pode colocar algum conteúdo inicial no buffer de entrada para que você tenha que pressionar Enter .
NODE_NO_READLINE=1 rlwrap -P"require('./myutils')" node
(A configuração NODE_NO_READLINE
diz a node
para não usar seu suporte embutido readline.)
Tags bash node.js shell-script