Noções básicas sobre leitura incorporada

2

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?

    
por oceanhead 16.08.2016 / 19:53

2 respostas

1

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

    
por 16.08.2016 / 20:34
1

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
    
por 16.08.2016 / 22:12