Cuando presiono la barra invertida \, aparece un >
símbolo (mayor que). ¿Qué significa esto?
Cuando presiono la barra invertida \, aparece un >
símbolo (mayor que). ¿Qué significa esto?
Respuestas:
Siempre que use la línea de comando, puede haber una instancia en la que necesite ejecutar un comando que sea muy largo. Por lo tanto, desea dividir el comando en varias líneas para una mejor legibilidad y comprensión. Pero si usa un nuevo carácter de línea que está escrito Enter, el shell pensará que es un nuevo comando. Entonces usas \
seguido del carácter de nueva línea.
Básicamente, los comandos o scripts de bash se "interpretan", es decir, se ejecutan línea por línea. Cada nueva línea significa el inicio de un nuevo comando. En la terminal, cuando presiona Enter, aparece un mensaje para ejecutar un nuevo comando. Entonces, una nueva línea necesita ser "escapada". Escribir \
seguido le Enterpermite dividir el comando actual en varias líneas para que el shell no piense que es un comando nuevo sino la continuación del comando anterior.
>
no es más que un mensaje para la siguiente línea del comando que se ingresa.
Por ejemplo:
si queremos instalar varios paquetes, el comando será como
$ sudo apt install [package1] [package2] [package3] ...
Pero a veces, eso hace que el comando esté abarrotado. Entonces podemos usar \
seguido de Enter(carácter de nueva línea)
$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
$PS1
y $PS2
. Consulte la página de manual de bash para conocer el formato y utilizar echo "'$PS2'"
para ver la configuración actual.
El carácter de barra diagonal inversa ( \
) se utiliza como carácter de escape en el shell. Si lo usa como el último carácter en la línea, se escapa de la nueva línea, por lo que puede continuar su comando en la siguiente línea en lugar de terminarlo. Esto se indica mediante la >
solicitud en Bash.
Ejemplo:
$ echo A\
> B
AB
$
Para poner un literal \
a su comando, debe escapar usando otra barra invertida:
$ echo \\
\
$
[agregando una respuesta (demasiado larga / compleja) ya que los otros 2 no mencionan cómo aparece el ">" ... es decir, no mencionan PS2]
Que has proporcionado: \Enter: la \dice a la cáscara de solo salida de la Entercomo un personaje literral en lugar de interpretarlo como de costumbre (tanto la cáscara "pasa a la siguiente línea" en lugar de poner fin a la línea de comandos actual e interpretarla A menos que sea en algunos. otras construcciones como un heredoc, un bucle for, etc.
Por lo tanto, su terminal interpreta \Entercomo: "vaya a la siguiente línea" (sin comenzar a interpretar el comando) y, por lo tanto, el terminal ahora le permite ingresar la segunda línea de un comando de varias líneas, y para que sea más visible se muestra el $PS2
contenido ( llamado el indicador de PS2 ) en cada línea posterior
La variable PS2 generalmente se define de manera predeterminada como: PS2="> "
y, por ejemplo, puede editar su ~ / .bashrc para redefinirlo como lo desee (teniendo en cuenta que debería, en mi opinión, evitar contener caracteres peligrosos, como >
o ;
, y debería ayudarlo ya sea que vea claramente que se trata de comandos multilínea, pero deshabilite su contenido multilínea (ej . PS2="#cont#"
:) o le permite copiarlos / pegarlos fácilmente con el menor impacto posible en sus líneas (ej . PS2=" "
:)
Lo cual, por cierto, es un mal defecto, ya que podría llevar a uno a eliminar algunos comandos binarios importantes en algunos casos.
Puede redefinir PS2 para que sea otra cosa (me gusta: PS2 = "", por ejemplo) para que los comandos multilínea se puedan copiar / pegar fácilmente sin temer lo siguiente:
Por ejemplo, supongamos que tiene un comando que comienza a ser bastante largo (y puede plegarse en su pantalla si su terminal no es lo suficientemente ancho):
grep -i "something" /some/file /another/file /3rd/file /etc/someimportantfile
Si el comando parece demasiado largo (y se ajusta), es posible que desee dividirlo visualmente en 2 líneas, eligiendo dónde (cuándo) desea la siguiente línea insertando: \Enteren el lugar apropiado:
grep -i "something" /some/file /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !
Usando la PS2 predeterminada, el shell agregó ">" antes de "/ etc / someimportantfile" .. así que si copia / pega esas 2 líneas en otro terminal, su acción será completamente diferente: en lugar de grepping en 4 archivos, el grep es solo va a los primeros 3 archivos, y la salida grep reemplaza el contenido del 4to archivo (/ etc / someimportantfile)!
Para evitar estos problemas (y muchos otros): podría, por ejemplo, definir: PS2=" "
hacer que los comandos de varias líneas sean más limpios y fáciles de copiar / pegar:
grep -i "something" /some/file /another/file /3rd/file \
/etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!
Observe cómo este tiempo / bin / somecommand es simplemente desplazar 2 espacios a la derecha, y no se insertó ">", por lo que puede copiar / pegar con seguridad este comando de 2 líneas.
PS2 también se usa en bucles "for" "while", etc., y tenerlo definido como "" es, para mí, mejor en esos también.