Script interaktiv gestartet?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
MrScoville
Beiträge: 93
Registriert: 09.09.2016 17:20:59
Lizenz eigener Beiträge: MIT Lizenz

Script interaktiv gestartet?

Beitrag von MrScoville » 20.10.2016 19:13:43

Hallo,

wie kann ich denn feststellen, ob ein Script interaktiv gestartet wurde oder zB beim Systemstart?

Ich möchte ein Script schreiben, das idR beim Systemstart ausgeführt wird. Wenn ich aber an der Konfiguration des Scripts herum fummele (als root), möchte ich es auch interaktiv ausführen können und dann ein paar Ausgaben einfügen. Beim Systemstart sollte es außer im Fehlerfall eher lautlos sein.

Danke vorab!
Carsten
Man mag gar nicht glauben, wie sehr ein 4096-bittiger RSA-Schlüssel einem den Tag vermiesen kann...^^

Der so genannte "Teufel im Detail" hat einen Namen: Tight coupling :evil:

Benutzeravatar
MSfree
Beiträge: 10759
Registriert: 25.09.2007 19:59:30

Re: Script interaktiv gestartet?

Beitrag von MSfree » 20.10.2016 20:04:45

bash (und andere Shells) setzt die Variable PPID, also die Prozeß-ID des Parentprozesses.

Nur, wenn dein Skript vom System gestartet wird, ist PPID 1, also die Prozeß-ID von init bzw. systemd.

TomL

Re: Script interaktiv gestartet?

Beitrag von TomL » 20.10.2016 20:34:51

MrScoville hat geschrieben:wie kann ich denn feststellen, ob ein Script interaktiv gestartet wurde oder zB beim Systemstart?
....oder Alternativ:

Code: Alles auswählen

# oberhalb aller Funktionen initialisieren
Trace=0

Code: Alles auswählen

# als übergebenden Programmparameter im Init-Teil des Script setzen
Trace=$1
Wird nur ausgeführt, wenn $Trace=1

Code: Alles auswählen

# ... und ihm Script an beliebigen Stellen Nachrichten ausgeben. Die Klammer (2) bezeichnet bei mir die 2. Trace-Ausgabe in dieser Funktion
(($Trace)) && printf "%-30s %-s\n" "Funktionname(2)" "line=$line  name=$name  var3=$var3"
Darüber hinaus kannst Du auch Logeinträge schreiben, die Du in einem zweiten offenen Terminal anzeigen lässt, mit

Code: Alles auswählen

journalctl -f 
oder nach dem Scriptlauf mit

Code: Alles auswählen

journalctl -b | grep Script-ID 
So erfolgt ein Logeintrag im Script, hier als Beispiel um den Start zu dokumentieren. Der Script-Identifier ist bei mir hier "thlu"

Code: Alles auswählen

echo "active/running   Action=$Action" | systemd-cat -t "thlu:`basename $0`" -p "info"
Den Log-Eintrag kann man wie zuvor auch mit "(($Trace)) &&" kombinieren.

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Script interaktiv gestartet?

Beitrag von newdeb » 21.10.2016 08:19:26

Verwende $- und prüfe das Interaktiv-Flag (i)

Code: Alles auswählen

$ echo $-
himBH
$ bash -c 'echo $-'
hBc
Funktioniert mit allen (POSIX-)Shells.

MrScoville
Beiträge: 93
Registriert: 09.09.2016 17:20:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Script interaktiv gestartet?

Beitrag von MrScoville » 21.10.2016 13:48:21

Danke euch allen! Viele Wege führen nach Rom, ich schau mal welcher mir am besten taugt.

LG
Carsten

@admins: Ihr könnt hier zu machen :)
Man mag gar nicht glauben, wie sehr ein 4096-bittiger RSA-Schlüssel einem den Tag vermiesen kann...^^

Der so genannte "Teufel im Detail" hat einen Namen: Tight coupling :evil:

Antworten