Ich habe einen Text gelesen, in dem steht:
Die .bashrc-Shell-Konfigurationsdatei wird tatsächlich jedes Mal ausgeführt, wenn Sie eine BASH-Shell generieren, z. B. wenn Sie ein Shell-Skript ausführen. Mit anderen Worten: Jedes Mal, wenn eine Subshell erstellt wird, wird die .bashrc-Datei ausgeführt. Dies hat zur Folge, dass alle lokalen Variablen oder Aliase exportiert werden, die Sie in der .bashrc-Shell-Initialisierungsdatei definiert haben.
Ich habe auch gelesen, dass jedes Mal, wenn ich ein Shell-Skript ausführe (sagen wirscript1.sh), wird eine Unterschale erstellt. Wenn diese Unterschale erstellt wird,.bashrcDatei muss ausgeführt werden und daher Alias(e) definiert in.bashrcmüssen in der Subshell verfügbar sein (was nicht der Fall ist). Und wenn Aliase in dieser Subshell nicht verfügbar sind, wie sind sie dann in der Hauptshell verfügbar (über die ich mein Skript ausführe)?
Antwort1
Richtig, in der Bash-Shell von Linux können Sie sagen
source /path/to/my_lib.sh
zum Laden Ihrer Aliasdefinitionen aus einer Datei. Oder, um die Komplexität zu verringern, können Sie diese Aliasdefinitionen einfach in Ihr Bash-Skript kopieren.
Aber warten Sie! Dies wird nur die Aliase erstellen, wahrscheinlich mit
alias foo3 foo9 # describe these two aliases: declare errors if one doesn't exist
Sie werden Freude an Ihren neuen Aliasdefinitionen haben, aber ihre Ausführung wird fehlschlagen, bevor Sie die Aliaserweiterung mit Folgendem aktivieren:
shopt -s expand_aliases # alias xpn ON
Bedenken Sie auch:
shopt -u expand_aliases # alias xpn OFF
oder
shopt expand_aliases # query whether
oder
unalias foo3 foo9 # delete these aliases
Antwort2
Wenn Sie Aliase definiert haben script1.sh
und diese überall verfügbar sein sollen, fügen Sie Ihrer .bashrc
Datei Folgendes hinzu:
source /path/to/script1.sh
oder alternativ:
. /path/to/script1.sh
Um einen Fehler zu vermeiden, falls das Skript nicht existiert, können Sie Folgendes verwenden:
if [ -f /path/to/script1.sh ]; then source /path/to/script1.sh; fi
Das Gleiche funktioniert für alle Funktionen, die Sie in definieren script1.sh
.