GNU/Linux >> Linux Esercitazione >  >> Linux

Determinazione del percorso per lo script della shell di origine?

C'è un modo per un proveniente script di shell per scoprire il percorso verso se stesso? Mi occupo principalmente di bash, anche se ho alcuni colleghi che usano tcsh.

Immagino di non avere molta fortuna qui, dal momento che il sourcing fa eseguire i comandi nella shell corrente, quindi $0 è ancora l'invocazione della shell corrente, non lo script di origine. Al momento, il mio pensiero migliore è fare source $script $script , in modo che il primo parametro posizionale contenga le informazioni necessarie. Qualcuno ha un modo migliore?

Per essere chiari, sto sourcing lo script, non in esecuzione:

source foo.bash

Risposta accettata:

In tcsh , $_ all'inizio dello script conterrà il percorso se il file è stato originato e $0 lo contiene se è stato eseguito.

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

In Bash:

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

Linux
  1. Determinare la shell nello script durante il runtime?

  2. Processi in una sessione in una shell interattiva vs in uno script?

  3. Come scrivere uno script di shell con origine automaticamente in /etc/profile?

  4. Il significato di $? In uno script di shell?

  5. Shell Script per stampare la piramide di stelle

Come utilizzare le variabili negli script della shell

Come creare script di shell

Come eseguire un comando in uno script della shell?

Script di traslitterazione per shell linux

Un file .sh può essere un malware?

Lo script di shell è un linguaggio di programmazione?