Öffnen Sie ein Gnome-Terminal über ein Bash-Skript und rufen Sie einen Alias-Befehl auf und führen Sie ihn aus

Öffnen Sie ein Gnome-Terminal über ein Bash-Skript und rufen Sie einen Alias-Befehl auf und führen Sie ihn aus

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 bashbis bash.

  • Es funktioniert natürlich, wenn das Neue bashein Nachkomme des Alten ist bash(wo die Funktion exportiert wurde). Wenn beispielsweise gnome-terminalvom Alten erbt bashund das Neue bashvom gnome-terminal. Dies geschieht, wenn das Alte bashin einem Terminal ausgeführt wird, das nicht ist gnome-terminal.

    Meine Tests zeigen, dass der neue Prozess die Aufgabe an den bereits laufenden delegiert und beendet, wenn gnome-terminaler von innen ausgeführt wird gnome-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-terminalgnome-terminalbashgnome-terminalbashgnome-terminalbashgnome-terminal

verwandte Informationen