
Ich schreibe eine Bash-Funktion, die einige Befehle zum Einrichten der Umgebung ausführt und den Benutzer dann an der Eingabeaufforderung zurücklässt.
Ich kann rennen
bash -c 'ls'
Zur Ausführung ls
in Bash.
Ich kann auch
bash -c 'ls ; exec bash'
Zum Ausführen ls
und anschließenden Öffnen einer Bash-Eingabeaufforderung.
Ich möchte jedoch eine Datei als Quelle verwenden und einige Aliase, Funktionen und Umgebungsvariablen einrichten und dann die Eingabeaufforderung geöffnet lassen, also ungefähr so:
bash -c 'source env.sh ; exec bash'
Das funktioniert natürlich nicht, da Subshells keine Aliase oder Funktionen erben. Gibt es eine Möglichkeit, dieses Problem zu umgehen? Ich würde es vorziehen, die Benutzer weiterhin .bashrc
als Quelle zu verwenden und die --init-file
Option nicht zu verwenden.
Antwort1
Richten Sie eine Init-Datei ein, die beim Start die Init-Datei des Benutzers als Quelle verwendet, und tun Sie dann alles andere, was Sie möchten:
$ cat env.sh
. ~/.bashrc
export SOMEVAR="value"
somespecialfunction() {
printf '%s\n' "I'm so cool"
}
$ bash --init-file env.sh