Cuando ingreso una comilla simple '
en la terminal, pasa a otro modo y los comandos no se ejecutan. ¿Qué es este modo y cuándo lo usamos?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
command-line
bash
manikanta
fuente
fuente
'
)Respuestas:
Efectivamente, el shell solicita un comando / expresión completo y , por esa razón, muestra la
PS2
cadena de solicitud.De
man bash
:Y un poco antes de eso:
Por lo tanto, como puede suponer al leer la documentación, los shells tienen múltiples mensajes con diferentes propósitos. El
PS1
indicador es suroot@sai:~#
cadena, que se muestra normalmente cuando ingresa comandos.>
es elPS2
aviso También hay otros:PS3
para elselect
bloque de comandos yPS4
para la depuración con elset -x
comando. En este caso estamos más interesadosPS2
.Hay muchas formas en que el shell puede mostrar la
PS2
solicitud (y dónde podría ser necesario completar un comando en una nueva línea). El mismo aviso se utiliza cuando realiza lahere-doc
redirección (donde un comando se considera completo cuando ve la cadena de terminación, en este ejemploEOF
):Muy a menudo, la continuación de un comando largo se puede hacer agregando
\
una nueva línea inmediata (!), Lo que hará que aparezca el mismo mensaje:Cuando las tuberías, los operadores lógicos o las palabras clave especiales aparecen en la línea de comando antes de la nueva línea, el comando también se considera incompleto hasta que se ingresen todas las declaraciones finales:
En su caso particular, una cita simple implica una interpretación literal de lo que está entre las citas simples. Por lo tanto, como señaló Zanna, está ingresando un comando que consiste en nueva línea +
ls
+ nueva línea. No se puede encontrar un nombre de archivo ejecutable de este tipo (y, por lo general, los nombres de archivo de comandos deben consistir solo en caracteres alfanuméricos, además de guiones bajos, guiones y puntos). Aunque de hecho es posible tener nombres de archivo que contengan caracteres especiales, siempre se evita.NOTA : tal comportamiento, como se muestra en su ejemplo, es específico de los shells tipo Bourne, incluidos
bash
,dash
(en Ubuntu está vinculado a/bin/sh
)ksh
, ymksh
.csh
y sus derivados no se comportan de esa manera:Sin embargo, en modo interactivo,
csh
seguirá apareciendo?
como prompt2 cuando se requiera más entrada:Ver también:
fuente
What's the difference between <<, <<< and < < in bash?
está fuera de línea / incorrecto.El caparazón solo está esperando la cotización de cierre. Cuando lo ingrese, hará exactamente lo que hace habitualmente e intentará ejecutar el comando ingresado.
Las comillas hacen que el shell no interprete caracteres especiales, lo que significa que no se realizan expansiones. Las comillas simples suprimen completamente toda interpretación de caracteres especiales. Normalmente, una nueva línea separa los comandos, pero aquí ha incluido las nuevas líneas como parte del comando entre comillas.
Como no existe tal comando
<newline>ls<newline>
, no se encuentra.fuente