GNU/Linux >> Tutoriales Linux >  >> Linux

¿Determinar la ruta al script de Shell de origen?

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

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

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

source foo.bash

Respuesta aceptada:

En tcsh , $_ al comienzo de la secuencia de comandos contendrá la ubicación si el archivo se originó y $0 lo 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"

Linux
  1. Shebangs independientes de la ruta?

  2. ¿Procesos en una sesión en un shell interactivo versus en un script?

  3. ¿Cómo escribir un script de shell de origen automático en /etc/profile?

  4. ¿El significado de $? ¿En un guión de Shell?

  5. Shell Script para imprimir pirámide de Estrellas

Cómo usar variables en secuencias de comandos de Shell

Cómo crear scripts de shell

¿Determinar Shell en el script durante el tiempo de ejecución?

¿Tiempo de espera agotado en un script de Shell?

¿Cómo ejecutar un comando en un script de Shell?

Ejecute un script de shell como un usuario diferente