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