GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bestimmen des Pfads zum bezogenen Shell-Skript?

Gibt es eine Möglichkeit für ein sourced Shell-Skript, um den Pfad zu sich selbst herauszufinden? Ich beschäftige mich hauptsächlich mit bash, obwohl ich einige Kollegen habe, die tcsh verwenden.

Ich vermute, dass ich hier nicht viel Glück habe, da Sourcing dazu führt, dass Befehle in der aktuellen Shell ausgeführt werden, also $0 ist immer noch der Aufruf der aktuellen Shell, nicht das Quellskript. Mein bester Gedanke ist derzeit, source $script $script zu tun , sodass der erste Positionsparameter die notwendigen Informationen enthält. Hat jemand einen besseren Weg?

Um es klar zu sagen, ich beziehe Sourcing das Skript, ohne es auszuführen:

source foo.bash

Akzeptierte Antwort:

In tcsh , $_ am Anfang des Skripts enthält den Ort, an dem die Datei bezogen wurde, und $0 enthält es, wenn es ausgeführt wurde.

#!/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. Zeitüberschreitung in einem Shell-Skript?

  2. Pfadunabhängige Shebangs?

  3. Wie schreibe ich ein automatisch bezogenes Shell-Skript in /etc/profile?

  4. Die Bedeutung von $? In einem Shell-Skript?

  5. Aktuelles Verzeichnis des Shell-Skripts?

So verwenden Sie Variablen in Shell-Skripten

So erstellen Sie Shell-Skripte

Shell im Script zur Laufzeit ermitteln?

Prozesse in einer Sitzung in einer interaktiven Shell oder in einem Skript?

Wie führe ich einen Befehl in einem Shell-Skript aus?

Wo wird die PATH-Variable in Ubuntu gesetzt?