ubuntuusers.de

[bash] Ausführungsmodus unterscheiden

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9783

Wohnort: Münster

Ich möchte in einem Bash-Skript abfragen, in welchem Modus es selbst ausgeführt wird, d.h. es geht mir um diesen Unterschied:

  1. Skript wird in einem eigenen Prozess gestartet, also z.B.:

    ./Skript 
  2. oder: Skript wird von einer Instanz von bash per source-Kommando eingelesen:

    . Skript 
  3. (Gibt es weitere Fälle zu berücksichtigen?)

Ich habe schon herausgefunden, dass im ersten Fall die Variable $0 auf den Namen des Skripts lautet und im zweiten Fall einfach "bash".

Gibt es andere (bessere?) Methoden zu Unterscheidung?

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Stack Overflow hat sich bereits sehr detailliert mit der Frage auseinandergesetzt und die mir am besten erscheinende Lösung ist

(return 0 2>/dev/null) && sourced=1 || sourced=0 

In diesem Befehl wird das Verhalten der bash dahingehend ausgenutzt, dass return nur in bestimmten Situationen erlaubt ist. Detailliertere Erläuterungen und Ansätze, die auch andere Shells behandeln, finden sich im verlinkten Beitrag.

kB Team-Icon

Supporter, Wikiteam
(Themenstarter)
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9783

Wohnort: Münster

Cranvil schrieb:

Stack Overflow hat sich bereits sehr detailliert mit der Frage auseinandergesetzt […]

Danke für den hilfreichen Hinweis!

Ich dachte ursprünglich, es wäre ein ganz einfaches Problem. Tatsächlich ist es aber eine Schatzkiste voller Würmer und Wanzen. Ich überlege jetzt, mein Skript so zu strukturieren, dass ich diese problematische Abfrage nicht benötige.

Antworten |