Saltar al contenido

¿Por qué hay saltos de línea con barra invertida “ en este comando de instalación de apt?

Este equipo de redactores ha pasado horas investigando para darle soluciones a tus búsquedas, te ofrecemos la respuestas por eso deseamos serte de gran apoyo.

Solución:

La barra invertida es usada por bash para indicar una continuación de línea y se usa comúnmente en scripts de bash. Sin embargo, la barra invertida es Realmente el personaje de escape de bash. Entonces, este uso de la barra invertida ‘escapa’ de la newline para crear una continuación. Genial y bueno saberlo, ¿eh? En particular, la Sección 3.1.2.1 del manual de GNU bash dice:

Una barra invertida sin comillas ” es el carácter de escape de Bash. Conserva el valor literal del siguiente carácter que sigue, con la excepción de la nueva línea. Si aparece un par newline y la barra invertida en sí no está entrecomillada, newline se trata como una continuación de línea (es decir, se elimina del flujo de entrada y se ignora efectivamente).

Para responder a su pregunta específica: el autor simplemente indica que la expresión de varias líneas es un comando bash de una sola línea. Esta expresión de varias líneas funcionará si no hay caracteres después de ” pero newline. Sin embargo, si uno corta y pega, puede haber todo tipo de cruft (por ejemplo, espacios) después de la ”. Por lo tanto, elimine todos los caracteres finales después de ” o simplemente coloque el comando en una línea, como lo ha estado haciendo. A menudo encuentro conveniente usar ” cuando escribo un comando largo, pero es una cuestión de preferencia personal.

los El carácter al final de la línea se interpreta como un carácter de continuación de línea en bash que le dice a bash que espere una continuación del comando en la siguiente línea a menos que:

  • los el personaje es parte de un string que está entre comillas simples o dobles
  • o la El personaje se escapa poniendo otro carácter de barra invertida delante de él como este \ lo que hace que se interprete como un carácter literal.

Nota: Una barra invertida sin comillas también se utiliza como carácter de escape en bash.

Copiar / pegar un comando de varias líneas como el siguiente ejemplo desde un editor de texto en el terminal da como resultado que el comando se ejecute como un comando de una sola línea.

Texto original:

touch 1 
2 
3 
&& ls

Texto original copiado / pegado en la terminal:

$ touch 1 
> 2 
> 3 
> && ls
1  2  3

Cuando se copia / pega el siguiente comando de varias líneas desde un editor de texto en la terminal, se imprimen los caracteres de barra invertida. Las barras invertidas se interpretan como caracteres de barra invertida literal en este comando porque están encerradas entre un par de caracteres de comillas (simples).

Texto original:

echo 'This is 
a multiple line 
command.'

En la terminal:

$ echo 'This is 
> a multiple line 
> command.'
This is 
a multiple line 
command.

Todos los comandos en esta respuesta los escribí originalmente en un editor de texto antes de pegarlos en la terminal, por lo que no hay caracteres invisibles en los comandos que podrían hacer que los comandos no funcionen.

es el carácter de continuación de línea en sh / bash como en C (para #definir un largo macro) o varios otros lenguajes informáticos, lo que permite envolver largas líneas en la fuente sin cambiar el significado en un lenguaje orientado a líneas.

Simplemente funciona con una sola pasta si la selección no incluye ningún espacio después de la personajes, solo una nueva línea. (En Chromium, eso se muestra como un “cuadro” de carácter azul que parece un espacio al final de la línea, pero aparentemente esa es en realidad la nueva línea). Algunas páginas web incluyen espacios finales en su código formateado. Quizás el autor copió / pegó desde una terminal que incluía espacios a un ancho fijo y no lo limpió para su bloque de código.

Puede saber esto visualmente seleccionando todo y mirando los finales de las líneas. Si es bueno, puede pegarlo en una terminal. De lo contrario, puede pegarlo en un editor y contraer el ... spaces newline tú mismo.

O si no lo es también complicado, es posible que pueda pegar dentro de comillas simples en la línea de comando y luego usar la flecha hacia arriba para solucionarlo.

O pegue cada línea por separado si eso le resultará más fácil, omitiendo el ... creando una larga fila. O incluso incluir manualmente el pero no espacios finales o nueva línea en su copia, luego presione regresar después de pegar cada línea.

Chromium al menos le permite ajustar su selección con shift + flecha izquierda / derecha si tiene problemas para obtener todos los caracteres que desea con el mouse, pero no caracteres que no quieres.


Los bloques de formato de código de Stack Exchange pueden reproducir fielmente ejemplos buenos y malos para que pueda probarlo en su navegador y ver qué buscar.

# Good: 
echo 1 
     2 
     3 

# Bad: spaces after backslash: needs editing to copy/paste
echo 1      
     2     
     3 

pegar resultado: el solo escapa a un espacio, no a una nueva línea. Las líneas individuales son inofensivas por sí mismas, por lo que es seguro jugar con ellas. No como un rm * que se supone que es parte de otra cosa, o que inicia programas reales, a menos que tenga alias o funciones de shell llamadas 2 o 3`.

[email protected]:/tmp$ echo 1      
1  
[email protected]:/tmp$      2     
bash: 2: command not found
[email protected]:/tmp$      3 
bash: 3: command not found

Una forma rápida de solucionarlo sin iniciar un editor independiente:

Pegar dentro de comillas simples:

$ 'echo 1      
>      2     
>      3 '
bash: $'echo 1 \     n     2 \    n     3 ': command not found

Tenga en cuenta que bash utilizó $'C-escaped' sintaxis para citarme el comando. De hecho, presioné regresar para que todo se ingresara en el historial de la línea de comandos. La edición de línea bash no volverá a una línea anterior ya enviada, pero las cosas citadas de varias líneas crean una única entrada de historial de varias líneas.

La flecha hacia arriba desde allí me da todo eso como un solo comando con nuevas líneas incrustadas que puede editar. Debe eliminarlos o aún se interpretará como varios comandos, como si fueran ; punto y coma. También, por supuesto, elimine el ' citas.

Ctrl-w (unix-word-rubout) trata como una “palabra”, y se detiene después de ella. (A diferencia de Md (escape-d) para eliminar la palabra hacia adelante, o M-backspace (eliminar la palabra hacia atrás); esos eliminarían la palabra pasado la barra invertida). Ctrl-w incluso trata la nueva línea como una “palabra” (que en realidad no es lo que queremos; desde el primer carácter que no sea un espacio en blanco que nos gustaría eliminar hasta el en la línea anterior).

ctrl-left (o escape-f) / ctrl-right (o escape-b) mueve el cursor por palabras completas para que puedas llegar rápidamente al comienzo de una “línea” para control-w. O ctrl-r para invertir la búsqueda i puede llevarlo allí, luego presione Ctrl-Derecha + Izquierda para llegar a la primera palabra de la siguiente línea.

Ctrl- / es deshacer, lo cual es realmente útil porque te permite ser agresivo con key-repetir o lo que sea, y recuperarse rápidamente del rebasamiento.

Si usa la edición de línea bash / readline con regularidad, ya recordará muchos de estos comandos. Los menciono aquí solo para el beneficio de las personas con menos experiencia con la edición de líneas de bash que podrían pensar que vale la pena copiar / pegar en un editor y luego en bash. Sin duda, esa es una opción, especialmente si ya tiene un editor abierto.


Otro comando de edición posiblemente útil es M- (barra invertida meta / escape). Eso elimina los espacios en blanco que rodean el cursor. Podrías usar eso dos veces, con el cursor después del en el, para dejarlo como una cosa de varias líneas con continuaciones. Por ejemplo, recupere el comando con flecha hacia arriba

  • retroceso / ctrl-a / delete (o ctrl-d) para eliminar las comillas simples
  • ctrl-s hacia adelante i-search para , luego la flecha hacia la derecha (o ctrl-f) para mover el cursor al espacio después del
  • escapar-. (O alt- si su terminal está configurado correctamente para que funcione como meta de edición de línea de emacs, normalmente enviando un escape prefix.)
  • ctrl-s ctrl-s para reenviar i-search para lo mismo nuevamente
  • repetir la flecha derecha + matar espacio en blanco

(No estoy sugiriendo memorizando Estos pasos, esta es solo una forma de usar la edición de líneas para hacer el trabajo.)

O puede quitar el y nueva línea (y contraiga los espacios en blanco a 1 espacio si lo desea), como sugerí con control-w. Eliminar / ctrl-d o retroceso eliminará una nueva línea o barra invertida cuando tenga el cursor en el lugar correcto. La edición de línea bash aparentemente no tiene emacs M-space para contraer los espacios en blanco a 1 (en lugar de 0) espacios, pero puede hacerlo manualmente con M- + espacio.

Aquí tienes las reseñas y puntuaciones

Si posees algún reparo y capacidad de progresar nuestro ensayo eres capaz de añadir una nota y con deseo lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *