Welche Startdatei wird von meiner Shell verwendet?

Welche Startdatei wird von meiner Shell verwendet?

In meiner Ubuntu-Installation auf Google Compute Engine gibt es mehrere Startdateien.

Gibt es einen Befehl, der mir sagt, welche Startdatei von der Shell verwendet wird, die ich aktuell verwende?

Antwort1

Die Liste der Dateien, die Shells normalerweise beim Start lesen, ist auf wenige beschränkt. Diese können jedochQuelleandere, und das können große Zahlen sein, beispielsweise wenn komplexe Vervollständigungssysteme geladen werden.

Ein Ansatz besteht darin, Ihre Shell mit folgendem auszuführen:

strace -e open your-shell

(oder der entsprechende Befehl auf Ihrem System wie truss/ tusc/ dtruss...)

Dadurch werden alle Dateien aufgelistet, die die Shell öffnet. Außerdem werden die Dateien aufgelistet, die sie öffnet und die keine Startdateien sind, sowie Dateien, die sie versucht, aber nicht öffnen kann.

Ein anderer Ansatz könnte darin bestehen, den Modus einiger Shells zu verwenden xtrace, bei dem die Shell auf stderr ausgibt, was sie für jeden Befehl tun wird. Dazu rufen Sie einfach die Shell mit der -xOption auf.

Einige Shells wie zshdrucken standardmäßig die Pfade der Datei, aus der der ausgeführte Code stammt (Sie können jedoch beispielsweise festlegen, PS4dass +%x>der Dateiname auch für in Funktionen ausgeführten Code gedruckt wird). Bei anderen, wie bashoder ksh93, können Sie den Ausdruck durch Ändern der $PS4Variable veranlassen.

PS4='+$BASH_SOURCE> ' bash -x
PS4='+${sh.file}> ' ksh93 -x
PS4='+%x> ' zsh -x

Mit bashkönnen Sie die Ausgabe so nachbearbeiten, dass nur eindeutige Pfade der Dateien erhalten bleiben, etwa mit:

PS4=' <:>$BASH_SOURCE<:>' BASH_XTRACEFD=3 3> >(
  awk -F'<:>' 'NF>2 && !seen[$2]++ {print $2}') bash -x

(vorausgesetzt, die Pfade der Startdateien enthalten keine Zeilenumbrüche oder <:>und in den Startdateien wird kein mehrzeiliger Befehl ausgeführt, der Folgendes enthält <:>)

Diese xtraceauf -basierten Ansätze listen weder Startdateien auf, die leer sind oder nur aus Kommentaren oder Funktionsdefinitionen bestehen (es sei denn, diese Funktionen werden später ausgeführt), noch Startdateien, die die Shell verarbeiten würde, wenn sie da wären.

Sie können jedoch die Dateien abrufen, aus denen Funktionen definiert wurden mit

eval "(shopt -s extdebug; declare() { typeset -F \"\$2\"; }
  $(typeset -F))" | cut -d ' ' -f 3- | sort -u

mit bashoder

type ${(k)functions} | sed -n 's/.*is a shell function from //p' | sort -u

mit zsh.

verwandte Informationen