qual é o seu objetivo?
echo é executável ( /bin/echo ), read is builtin. -e significa executar um executável. Se você quiser usar uma função interna do seu shell (bash?) Use urxvt -e /bin/bash -c read -r CMD
Estou tentando escrever um script de shell simples para iniciar comandos com o urxvt. A ideia é esta (não o roteiro completo, apenas a ideia):
PRMPT="read -r CMD"
urxvt -g 55x6-20+20 -e $PRMPT
CMD
Existem dois problemas com este script. O primeiro é que read não é adequado para esse tipo de tarefa, pois ignora as opções de um comando (se eu escrever echo hello read atribuiria echo a CMD e ignore hello ). O segundo, que é o que mais me intriga, é que urxvt -e sai imediatamente e não espera pela minha entrada. Eu acho que isso tem a ver com o fato de que read é uma função interna, mas por exemplo urxvt -e echo hello funciona bem.
Alguém tem alguma sugestão sobre como alterar o script?
Eu não sei o urxvt , mas posso ajudá-lo com read .
Quando você usa read desta maneira:
read -r CMD
Ele atribui o primeiro token para a variável CMD . Se você quiser ler mais tokens, pode declarar mais variáveis explicitamente.
read -r CMD ARGS1 ARG2 ARG3
Nesse caso, se houver mais tokens do que variáveis aos quais eles devem ser atribuídos, a última variável aceita o que é intuitivamente suposto, além do resto dos tokens lidos.
Você também pode usar uma matriz adicionando a opção -a .
read -ra CMD
Para expandir uma matriz, faça:
"${CMD[@]}"
Ilustração.
$ read -a cmd
echo ok
$ ${cmd[@]}
ok
Tags shell-script read