He estado buscando en Google esta pregunta en vano. Estoy automatizando un proceso de compilación aquí en el trabajo, y todo lo que intento hacer es obtener números de versión y una pequeña descripción de la compilación que puede ser de varias líneas. El sistema en el que se ejecuta es OSX 10.6.8.
He visto todo, desde usar CAT hasta procesar cada línea según sea necesario. No puedo entender qué debo usar y por qué.
Intentos
read -d '' versionNotes
Da como resultado una entrada confusa si el usuario tiene que usar la tecla de retroceso. Además, no hay una buena manera de terminar la entrada ya que ^ D no termina y ^ C simplemente sale del proceso.
read -d 'END' versionNotes
Funciona ... pero aún distorsiona la entrada si se necesita la tecla de retroceso.
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
No finaliza correctamente la entrada (porque soy demasiado tarde para buscar coincidencias con una cadena vacía).
Respuestas:
man bash
menciona «...... »
y estoy de acuerdo en que vale la pena mencionar esto:
echo "$myVar"
habría mostrado la entrada tal como fue dada.fuente
man stty
, descubra cómo obtener la configuración actualPrueba esto:
Sin saltos de línea:
Con saltos de línea:
fuente
-d ''
es exactamente lo que necesitaba GraciasConsulte la excelente Guía de Bash para todas sus necesidades de secuencias de comandos bash.
En particular, las preguntas frecuentes de Bash contienen esto en el número 1:
¿Cómo puedo leer un archivo (flujo de datos, variable) línea por línea (y / o campo por campo)?
fuente
read -r
, pero ¿cómo hago para que STDIN lo haga? Intenté usarloread -r
desde el principio.He resuelto este problema tratando con cada línea hasta que apareció una línea en blanco. Funciona lo suficientemente bien para mi situación. Pero si alguien quiere agregar una mejor solución, siéntase libre de hacerlo.
fuente
read -r
lugar.Puedes iniciar un editor como vim, pico ...
fuente
Primero algunas correcciones:
-e
que usa readline (para que tenga el historial de bash y todas las funciones de edición)-d
Solo toma un personaje. Por ejemplo, desde 'FIN' toma 'E' y cada vez que el usuario escribe una 'E' la lectura se detiene (supongo que eso no es lo que quieres ...)Hay algunas posibilidades para hacer esto. Iría a leer línea por línea y me detendría cuando se encuentra una línea vacía (aunque podría establecer cualquier palabra de detención):
fuente
Tienes varios métodos.
Uno de los métodos más simples es:
Por ejemplo:
fuente
ls
!Estamos usando una construcción usando xargs y ctrl-d para romper. No estoy completamente satisfecho con él, pero ciertamente hace el trabajo de tomar la entrada del usuario multilínea y ponerla en una variable (formato intacto). (La primera y la tercera asignación agregan comillas alrededor del contenido de la entrada xargs).
Usamos reminderBody como el tema de un correo electrónico que se envía por correo (a través de bash).
fuente
Ver: http://tldp.org/LDP/abs/html/internal.html#READR
Use
read
y tenga en cuenta que si termina una línea con\
la nueva línea se ignora. Entonces podrías hacer:fuente