
Tengo un script de pescado que exporta algunas variables y lanza un comando al final. Me gustaría poder obtener este archivo para incorporar estas variables a la sesión de shell actual, pero sin ejecutar el comando al final.
La pregunta: ¿Puedo saber si el archivo actual se está ejecutando o se obtiene desde dentro del archivo?
Respuesta1
Puede utilizar la $_
variable de entorno para ver si el comando "ejecuta" su script source
:
#!/bin/fish
if test "$_" = source
echo got sourced
else
echo was execed
end
Respuesta2
Puede utilizar la $_
variable de entorno para ver si el comando "ejecuta" su script source
. Tenga en cuenta que el source
comando tiene un alias común (" .
"), por lo que debe comparar la $_
variable de entorno con source
y .
.
#!/bin/fish
if test "$_" != "source" -a "$_" != "."
echo "not sourced"
else
echo "was sourced"
end
Un uso común de esto puede ser dar una advertencia al usuario, si el script no fue obtenido:
if test "$_" != "source" -a "$_" != "."
echo "Run this script with \". ./activate.fish\" (aka: \"source ./activate.fish\")."
exit 1
end
Reemplácelo activate.fish
con el nombre de su script, por supuesto.
Respuesta3
Creo que no entiendes lo que significa "obtener" un guión. Generalmente, ejecutar un script lo ejecutará en un proceso separado. Obtenerlo lo ejecutará en elcaparazón actual. Seguirá ejecutando cada línea.
Probablemente lo que quieras hacer es filtrar la última línea. Intentar:
source (sed '$d' filename | psub)
El psub
comando se utiliza para manejar la salida de algún proceso como si fuera un archivo.Documentación