[Solucionado] read -p dentro de una variable

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )
Responder
Avatar de Usuario
Zet0699
Forista Nuevo
Forista Nuevo
Mensajes: 7
Registrado: Jue Dic 24, 2020 1:05 am

[Solucionado] read -p dentro de una variable

Mensaje por Zet0699 »

Buenas,


Esta es mi duda respecto a un script en bash que estoy escribiendo (#!/bin/bash):

He confirmado que esto funciona:

Código: Seleccionar todo

zet@rincewind:~$ read -p "||--> " res ; echo "Has escrito $res"
||--> Pistachos
Has escrito Pistachos
Así que como pretendo solicitar datos mas veces al usuario me pareció buena idea poner el read -p en una variable a la que poder llamar cuando me haga falta, pero entonces daba error:

Código: Seleccionar todo

zet@rincewind:~$ var='read -p "||--> " res' ; $var ; echo "Has escrito $res"
bash: read: `"': no es un identificador válido 
Has escrito 
Por las pruebas que estuve haciendo parece que el problema estaba en esas comillas sueltas de "||--> " , dejé un espacio entre el prompt personalizado del parámetro -p y la respuesta del usuario para que no quedara tan pegado, por probar le quité el espacio:

Código: Seleccionar todo

zet@rincewind:~$ var='read -p "||-->" res' ; $var ; echo "Has escrito $res"
"||-->"Pipas
Has escrito Pipas
Con esto volvía a funcionar, pero por un lado sigo queriendo ejecutar el comando como al principio cuando estaba sin variable y además ahora deja de interpretar las comillas y las añade al prompt como si fuesen parte de el.

Se me ocurrió que la variable de entorno que determina el prompt del sistema, $PS1, si deja un espacio antes de permitirte escribir pero al miarmela veo que no hay nada al final que permita ese espacio.

Código: Seleccionar todo

zet@rincewind:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
Tampoco me ha servido poner el espacio en forma de carácter especial, exptension regular creo que se llama, con \s, el comando read no lo reconoce y te lo escribe tal cual.


Mi pregunta es:
¿Hay alguna forma de poner read -p "||--> " res ; echo "Has escrito $res" en una variable y que siga funcionando igual que fuera de ella?
Última edición por Zet0699 el Mar Ene 12, 2021 3:28 pm, editado 1 vez en total.
----
Zet0699 :geek:

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1838
Registrado: Dom Oct 10, 2004 7:00 am

Re: read -p dentro de una variable

Mensaje por neurus »

Las variables no se usan para eso (tuve que leer varias veces el post para entender lo que buscabas).
Lo que debes hacer es escribir una función. La sintaxis es:

function leer(){
read -p res;
}

Y luego se trata de lo que quieras hacer.

Avatar de Usuario
Zet0699
Forista Nuevo
Forista Nuevo
Mensajes: 7
Registrado: Jue Dic 24, 2020 1:05 am

Re: read -p dentro de una variable

Mensaje por Zet0699 »

Gracias, al final usé una función, el problema lo tenía yo por empeñarme en resolver esto con una variable a saco.

Doy el tema por resuelto.
----
Zet0699 :geek:

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje