Existe uma maneira conveniente de encapsular uma lista de comandos bash em rlwrap?

3

Graças a uma pergunta no superuser.com , descobri essa ferramenta rlwrap totalmente conveniente.

Ele satisfaz minhas necessidades (por exemplo, adicionar histórico de comandos a outra ferramenta cmdline), mas eu queria saber como posso usá-lo para adicionar o histórico de comandos a um comando shell 'composto', como o protótipo

$> while read line; do echo "i read $line"; done
hi
i read hi
^D

Quando coloco o loop while dentro de um script de shell e o executo como rlwrap ./whilereadline.sh , tudo bem.

Mas eu estou querendo saber como posso fazer isso sem a necessidade de um arquivo adicional, algo como

$> rlwrap (while read line; do echo "line: $line"; done)
bash: syntax error near unexpected token 'while'

Alguma idéia?

    
por xtofl 25.01.2012 / 22:11

2 respostas

6

Você já tentou

rlwrap sh -c 'while read line; do echo "i read $line"; done'

rlwrap precisa de um comando que possa ser executado, o que uma subshell induzida pela sintaxe () não é. sh -c ... é um comando no entanto. Substitua sh por bash ou qualquer shell que você preferir.

    
por 25.01.2012 / 22:19
3

rlwrap precisa de um programa para executar, não pode interpretar os comandos em si. Você pode encapsular o código de shell que deseja em um comando bash -c :

rlwrap bash -c 'while read line; do echo "line: $line"; done'

Note que, dependendo do código que você deseja usar para isso, a citação pode se tornar um pouco feia.

    
por 25.01.2012 / 22:21