Ich versuche, ein Bash-Skript zu schreiben, das ein neues Gnome-Terminalfenster öffnet und einen Alias-Befehl ausführt. Ich habe festgestellt, dass anstelle von Aliasen die Verwendung einer Funktion der richtige Weg ist. Ich habe beide Ansätze ausprobiert, aber ich bekomme es nicht zum Laufen, da ich eine Fehlermeldung erhalte, dass der Befehl nicht erkannt wird.
Das ist, was ich habe.
#!/bin/bash
# Cluster related functions
function gateway () {
ssh user@something -t ssh gateway
}
gnome-terminal --window-with-profile=Bash -- bash -c "gateway; bash;"
Ich erhalte den folgenden Fehler:
bash: gateway: command not found
Antwort1
Die einfachste Lösung besteht darin, die Funktion vor dem Aufruf zu exportieren gnome-terminal
:
export -f gateway
Anmerkungen:
Sie können keine Aliase exportieren.
Das Exportieren von Funktionen ist keine portable Funktion. Es funktioniert von
bash
bisbash
.Es funktioniert natürlich, wenn das Neue
bash
ein Nachkomme des Alten istbash
(wo die Funktion exportiert wurde). Wenn beispielsweisegnome-terminal
vom Alten erbtbash
und das Neuebash
vomgnome-terminal
. Dies geschieht, wenn das Altebash
in einem Terminal ausgeführt wird, das nicht istgnome-terminal
.Meine Tests zeigen, dass der neue Prozess die Aufgabe an den bereits laufenden delegiert und beendet, wenn
gnome-terminal
er von innen ausgeführt wirdgnome-terminal
(die Umgebung also Variablen enthält ) . Die natürliche Vererbung der Umgebung auf den neuen kann nicht erfolgen, dennoch ist der neue Prozess intelligent genug, um nicht nur den Befehl, sondern auch die Umgebung zu kommunizieren. Auf diese Weise verhält sich das Neue innerhalb des Alten wie ein Nachkomme des Alten , die exportierte Funktion funktioniert. Getestet mit 3.28.2.GNOME_TERMINAL_*
gnome-terminal
gnome-terminal
bash
gnome-terminal
bash
gnome-terminal
bash
gnome-terminal