read -p "Please Enter a Message:" message
¿Cómo puedo agregar un salto de línea después de Message:
?¿Cómo agrego un salto de línea para leer el comando?
read -p "Please Enter a Message:" message
¿Cómo puedo agregar un salto de línea después de Message:
?¿Cómo agrego un salto de línea para leer el comando?
me gusta Huang F. Lei's answer, pero si no te gusta el salto de línea literal, esto funciona:
read -p "Please Enter a Message: `echo $'\n> '`" message
Shows:
Please Enter a Message: > _
... donde _
es donde está el cursor termina. Tenga en cuenta que dado que las nuevas líneas finales generalmente se descartan durante la sustitución del comando, he incluido el >
posteriormente. Pero, en realidad, no parece que su pregunta original a querer esa parte del sistema, por lo que:
# Get a carriage return into `cr` -- there *has* to be a better way to do this
cr=`echo $'\n.'`
cr=${cr%.}
# Use it
read -p "Please Enter a Message: $cr" message
Muestra
Please Enter a Message: _
Tiene que haber una mejor manera, sin embargo.
Espero que haya una mejor manera :) – Strawberry
@Doug: Sí. Acaba de actualizarse con una * leve * mejora. Todavía no estoy contento con eso. :-) –
@Doug: Aunque ahora lo pienso, dado que 'echo' (como' read') es un bash incorporado, aunque lo anterior es un poco incómodo, al menos no está generando procesos innecesariamente. –
Desde la página de manual bash
:
-p prompt
Display prompt on standard error, without a trailing new-
line, before attempting to read any input. The prompt is
displayed only if input is coming from a terminal.
Por lo tanto, no con read
sí mismo, y poniendo \n
en la cadena del mensaje simplemente se hace eco de \n
. La respuesta debe ser simple, aunque - no reciben read
para mostrar la línea:.
echo "Please Enter a Message:" 1>&2
read message
Pero el 'echo' ocurrirá ya sea que la entrada provenga de un terminal o no; el mensaje 'leer' no lo mostrará. –
punto justo, _if_ el script se usará de forma no interactiva. – Alnitak
Además, tendría que redireccionar el eco al flujo de errores. – Strawberry
$ read -p "Please Enter a Message:
> " message
Please Enter a Message:
Pulsar un "salto de línea" entre ':' y '"' directamente
solución limpia, pero podría confundir a alguien que lea el código más tarde. – Alnitak
Funciona, pero es realmente una solución de ghetto. +1 independientemente – Strawberry
Es lo que funciona para mí, porque también tengo una variable, y con la solución 'read -p '$ (echo -e' Please Enter a Message: \ n \ b ')" message', imprime el nombre de la variable literalmente . Esta solución se expande adecuadamente. – aliteralmind
read -p "Please Enter a Message:
Volver" message
No funciona para mí con bash en Ubuntu 10.04. ¿Estás seguro de tu sintaxis allí? –
¿Quizás quiere presionar la tecla de retorno como la solución de Huang F. Lei? –
@LucaBorrione: sí –
sólo para mejorar las respuestas de Huang F. Lei y de T.J. Crowder que me gusta (1) y ha añadido .. Puede utilizar una de las siguientes sintaxis también, que básicamente son los mismos, depende de su gusto (yo prefiero el primero):
read -p "$(echo -e 'Please Enter a Message: \n\b')" message
read -p "`echo -e 'Please Enter a Message: \n\b'`" message
que tanto producirá la siguiente salida:
Please Enter a Message:
_
donde _ es el cursor.
En caso de necesitar una nueva línea en cualquier parte de la cadena, pero al final, puede utilizar \n
, por ejemplo
read -p "`echo -e '\nPlease Enter\na Message: '`" message
producirá
.
Please Enter
a Message: _
dónde. es una primera línea nueva en blanco y _ es el cursor.
Sólo para añadir un salto de línea final final que se tiene que utilizar \n\b
como en mi primer ejemplo
Sólo en busca de exactamente la misma cosa.Se puede utilizar:
# -r and -e options are unrelated to the answer.
read -rep $'Please Enter a Message:\n' message
y funcionará exactamente como se preguntó:
Please enter a Message:
_
Aquí es un extracto de la página de manual de bash explicarla:
palabras de la forma $ 'cadena 'son tratados especialmente. La palabra se expande a cadena, con caracteres de escama invertida reemplazados como se especifica en el estándar ANSI C . secuencias de escape de barra invertida, si está presente, se decodifican como sigue:
- (...)
- \ n nueva línea
- (...)
El resultado expandido es único -citado, como si el signo de dólar no hubiera estado presente en .
Me tomó un tiempo averiguarlo.
Tenga en cuenta que las comillas simples y comillas dobles se comportan de manera diferente en este sentido:
Una cadena entre comillas dobles precedida por un signo de dólar ($) hará que la cadena a traducir de acuerdo a la localización actual. Si la configuración de alquiler cur- es C o POSIX, se ignora el signo de dólar. Si la cadena se traduce y reemplaza, el reemplazo se cotiza en doble.
@ t-j-crowder Esta es una mejor manera, la que [T.J. Crowder] (http://stackoverflow.com/users/157247/t-j-crowder) estaba insinuando :) – dmitri
Me gusta esto. gracias por mejorar mi conocimiento –
¿Qué hace '-e' exactamente? funciona conmigo sin que '-e',' -e' cause solo para mí que '-s' ya no funciona. –
Aquí hay una mejora en la respuesta aceptada que no requiere el desove un subnivel:
read -p "Please Enter a Message:"$'\n' message
Desde el GNU Bash reference manual:
palabras de la forma
$'string'
se tratan de forma especial. La palabra se expande a cadena, con los caracteres escapados de barra invertida sustituidos según lo especificado por el estándar ANSI C.
Puede considerar actualizar la respuesta aceptada a [este] (http://stackoverflow.com/a/15696250/1048539) ya que es mucho menos hacky (y menos confuso para nosotros los futuros visitantes ...). – enderland