determinar la ruta al script de shell de origen

Pregunta:

¿Hay alguna forma de que un script de shell de origen encuentre la ruta a sí mismo? Me preocupa principalmente bash, aunque tengo algunos compañeros de trabajo que usan tcsh.

Supongo que es posible que no tenga mucha suerte aquí, ya que el abastecimiento hace que los comandos se ejecuten en el shell actual, por lo que $0 sigue siendo la invocación del shell actual, no el script de origen. Mi mejor pensamiento actualmente es hacer source $script $script , de modo que el primer parámetro posicional contenga la información necesaria. ¿Alguien tiene una mejor manera?

Para ser claros, estoy obteniendo el script, no ejecutándolo:

source foo.bash

Respuesta:

En tcsh , $_ al principio de la secuencia de comandos contendrá la ubicación si el archivo se obtuvo y $0 contiene si se ejecutó.

#!/bin/tcsh
set sourced=($_)
if ("$sourced" != "") then
    echo "sourced $sourced[2]"
endif
if ("$0" != "tcsh") then
    echo "run $0"
endif

En Bash:

#!/bin/bash
[[ $0 != $BASH_SOURCE ]] && echo "Script is being sourced" || echo "Script is being run"

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım