¿Podría explicar las siguientes oraciones del manual de Bash sobre $_
, especialmente las partes en negrita, tal vez con algunos ejemplos?
Al iniciar el shell, establezca el nombre de ruta absoluto utilizado para invocar el shell o el script de shell que se ejecuta como se pasa en el entorno o la lista de argumentos .
Posteriormente , se expande hasta el último argumento del comando anterior, después de la expansión.
Establezca también el nombre de ruta completo utilizado para invocar cada comando ejecutado y colocado en el entorno exportado a ese comando .
Al verificar el correo , este parámetro contiene el nombre del archivo de correo.
Respuestas:
Estoy de acuerdo, no está muy claro.
1. Al iniciar el shell,
si la
_
variable estaba en el entorno que labash
recibió , labash
deja intacta.En particular, si ese
bash
shell fue invocado por otrobash
shell (sin embargozsh
,yash
y algunasksh
implementaciones también lo hacen), entonces esebash
shell habrá establecido la_
variable de entorno en la ruta del comando que se está ejecutando (ese es el tercer punto en su pregunta). Por ejemplo, sibash
se invoca para interpretar un script como resultado de otrabash
interpretación de shell:Eso
bash
habrá pasado_=/path/to/bash-scrip
en el entorno dadobash-script
, y ese es el valor inicial de la$_
bash
variable en elbash
shell que interpreta ese script.Ahora, si la aplicación que invoca no pasa una
_
variable de entorno , elbash
shell invocado se inicializará$_
en el queargv[0]
se recibe, que podría serbash
,/path/to/bash
o/path/to/some-script
o cualquier otra cosa (en el ejemplo anterior, eso sería/bin/bash
si el she-bang del script era#! /bin/bash
o/path/to/bash-script
dependiendo del sistema ).De modo que el texto es engañoso ya que describe el comportamiento de la persona que llama que
bash
no tiene control. Esbash
muy posible que la aplicación que se invocó no se configure$_
en absoluto (en la práctica, solo algunos shells y algunas aplicaciones interactivas raras lo hacen,execlp()
por ejemplo), o podría usarlo para algo completamente diferente (por ejemplo,ksh93
configurarlo*pid*/path/to/command
).2. Posteriormente
El Posteriormente no está muy claro tampoco. En la práctica, eso es tan pronto como
bash
interpreta un comando simple en el entorno de shell actual.En el caso de un shell interactivo , eso estará en el primer comando simple interpretado,
/etc/bash.bashrc
por ejemplo.Por ejemplo, en el indicador de un shell interactivo:
Para un shell no interactivo , sería el primer comando en
$BASH_ENV
o del código alimentado a ese shell si$BASH_ENV
no está configurado.3. Cuando Bash ejecuta un comando
El tercer punto es algo diferente y se insinúa en la discusión anterior.
bash
, como algunos otros shells pasarán una_
variable de entorno a los comandos que ejecuta que contiene la ruta que sebash
utilizó como primer argumento para lasexecve()
llamadas al sistema.4. Al revisar el correo
El cuarto punto se describe con más detalles en la descripción de la
MAILPATH
variable:Ejemplo:
fuente
Prueba este sencillo ejemplo:
Ejecútelo dando la ruta absoluta (
/home/$USERNAME/test.sh
); salida:Primero
$_
contiene la ruta que usó para invocar el script y el segundo contiene el primer argumento en el medioecho
. Para el tercer elemento de la lista, si inicia una nueva terminal y escribe echo$_
, mostrará la variable que contiene laPATH
que generalmente se usa para buscar e invocar comandos (en mi máquina Ubuntu) en un shell normal o ruta absoluta a su.bashrs
archivo en un shell de inicio de sesión.Para el elemento cuatro de la página de manual de bash:
fuente
echo $_
esEDITOR
, y ¿por qué es? ¿Qué caso sigue? (3) ¿Puede dar un ejemplo de cómo verificar los correos electrónicos y cómo usarlos$_
en este caso?.bashrc
y comenta cada línea allí. Mantenga solo una línea que contenga un comando similarecho "test"
o similar. Guardar y cerrar. Luego correbash
e inmediatamenteecho $_
. Este último eco debería imprimir la prueba en la salida.MAILPATH
en linuxcommand.org/lc3_man_pages/bash1.htmlPara el caso 2, un ejemplo vale más que mil palabras:
Hace lo que adivina / espera. Me da un marcador de posición simple cuando estoy en la línea de comando para evitar que tenga que repetirme.
fuente