Me gustaría crear un archivo utilizando el comando echo y el operador de redireccionamiento, el archivo debe estar formado por unas pocas líneas.
Traté de incluir una nueva línea con "\ n" dentro de la cadena:
echo "first line\nsecond line\nthirdline\n" > foo
pero de esta manera no se crea ningún archivo con tres líneas, sino un archivo con solo una línea y el contenido literal de la cadena.
¿Cómo puedo crear usando solo este comando un archivo con varias líneas?
shell
command-line
echo
newlines
Abdul Al Hazred
fuente
fuente
Respuestas:
Solicitaste usar una sintaxis con el
echo
comando:(Pero considere también la otra respuesta que obtuvo).
La
$'...'
construcción expande secuencias de escape ANSI incrustadas.fuente
Lo que echo con los escapes de caracteres es la implementación definida En muchas implementaciones de echo (incluidas las más modernas), la cadena pasada no se examina en absoluto para detectar escapes de forma predeterminada.
Con el eco proporcionado por GNU bash (como incorporado) y algunas otras variantes de eco, puede hacer algo como lo siguiente:
Sin embargo, realmente suena como lo desea
printf
, lo que es más legible para mi ojo y más portátil también (tiene esta característica definida por POSIX):También podría considerar usar un documento aquí :
fuente
echo -en 'text..'
, mientras que la respuesta aceptada no reconoció mi carácter de nueva línea (\n
), loecho -en
hizo.Aquí hay otras formas de crear un archivo de varias líneas con el
echo
comando:donde el segundo y el tercer comando usan el
>>
operador de redirección, lo que hace que la salida del comando se agregue (agregue) al archivo (que ya debería existir, en este punto).O
donde los paréntesis agrupan los
echo
comandos en un subproceso, que se ve y actúa como cualquier programa único que genera múltiples líneas (comols
, por ejemplo).Una variación sutil de lo anterior es
Esto es un poco más eficiente que la segunda respuesta, ya que no crea un subproceso. Sin embargo, la sintaxis es un poco más complicada: tenga en cuenta que debe tener un espacio después del
{
y un punto y coma antes del}
.Consulte ¿Cuáles son los operadores de control y redirección de shell? para más información.
fuente
Para dar otra opción más, puede presionar Enter (es decir, una nueva línea literal):
Tenga en cuenta que no escribe el
>
al principio de la segunda línea. Ese es el indicador del shell secundario$PS2
, que el shell imprime cuando escribe un comando incompleto (p. Ej., En este caso, un comando con un carácter de comillas incomparable).fuente
POSIX 7 dice que no puedes
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
no está definido y las barras diagonales inversas están definidas en la implementación:a menos que tenga una extensión XSI opcional.
Entonces use
printf
en su lugar:la notación de formato de archivo :
También tenga en cuenta que Ubuntu 15.10 y la mayoría de las distribuciones implementan
echo
tanto como:help echo
which echo
lo que puede generar cierta confusión.
fuente
echo
incorporada en cada shell disponible en el sistema. En Ubuntu / bin / sh suele ser dash, bash también viene por defecto. zsh, rc, mksh, yash, csh, tcsh, ksh93 ... todos tendrán su propio eco con un comportamiento diferente. Tenga en cuenta quewhich echo
no le dará la ruta del eco del sistema en todos los shells.which
Originalmente (en los años 80) era un script csh solo para usuarios csh (cargó los alias de ~ / .cshrc) y todavía está en algunos sistemas.which
es un incorporado en zsh y tcsh.