Wie öffne ich ein Terminalfenster und führe einen Befehl aus, nachdem die Shell geöffnet wurde?

Wie öffne ich ein Terminalfenster und führe einen Befehl aus, nachdem die Shell geöffnet wurde?

Ich hätte gerne einen Befehl oder ein Skript, dasöffnet ein neues Gnome-Terminalfenster mit Bash, lädt eine Verlaufsdatei und bleibt geöffnet.

Ich habe nach einer Möglichkeit gesucht, ein Terminal zu öffnen und einen Befehl auszuführen, ohne es zu schließen. Die Antworten, die ich gefunden habe, sind im Wesentlichen zusammengefasst indiese Stackoverflow-Antwort.

Basierend auf diesen Methoden habe ich versucht, den folgenden Befehl auszuführen:

gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"

Allerdings ist der Verlauf, der im neuen Fenster angezeigt wird, nicht der in , history.txtsondern der in der Standarddatei .bash_history. Ich dachte, da nach dem history -rvon mir ausgeführten Befehl bash, der die .bashrcDatei als Quelle verwendet, vielleicht .bashrcetwas passiert, das den von mir geladenen Verlauf beeinflusst.

Darauf basierend habe ich die rcfileOption in der oben verlinkten Antwort ausprobiert, sodass ich nach Befehle einfügen kann .bashrc, was zu folgendem Ergebnis führte rcfile:

FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/history.txt

Wenn ich jedoch den folgenden Befehl ausführe:

gnome-terminal -e "bash --rcfile rcfile"

Der Verlauf im neuen Terminal ist immer noch der von .bash_history. Wenn ich den historyBefehl zum hinzufüge rcfile, wird angezeigt, dass der Verlauf von history.txtgeladen wurde.etwas danach rcfileüberschreibt den Verlauf, den ich lade.

Ich habe auch festgestellt, dass wenn ichsetze die HISTFILEVariable zurückmit export HISTFILE=''am Ende des rcfile,der Verlauf von history.txtwird nicht überschriebenund funktioniert. Ich möchte es jedoch nicht aufheben, HISTFILEda ich möchte, dass der Verlauf gespeichert wird, .bash_historywenn ich das neu geöffnete Terminal verwende.

Schließlich habe ich die -oOption in Bash gefunden und versucht, damit das zu machen, was ich wollte. Ich habe sie geändert rcfilein:

FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history

und führte den folgenden Befehl aus:

bash --rcfile rcfile.txt +o history

Ich hatte gehofft, dass die Ausführung bashmit das Überschreiben +o historydes Verlaufs von verhindern würde , während der Befehl in den den Bash-Verlauf reaktivieren würde. Dies funktioniert jedoch auch nicht wie beabsichtigt, da der Verlauf der von ist, dann aber keine Verlaufsprotokollierung mehr erfolgt und ich ihn manuell eingeben muss, damit es funktioniert.history.txtset -o historyrcfilehistory.txtset -o history

Im Grunde führt mich alles, was ich versucht habe, immer wieder zur gleichen Frage:wie öffne ich das neue Terminal mit Bash undDanneinen Befehl ausführen, als ob ein Benutzer es eingeben würde?

Darüber hinaus möchte ich ein besseres Verständnis vonwas passiert, nachdem das rcfileausgeführt wird, da ich keine andere relevante Datei finden konnte, die als Quelle verwendet wurde. UndGibt es eine Möglichkeit, dieses Verhalten über die Befehlszeile zu deaktivieren??

Antwort1

Ich habe einen Workaround gefunden, indem ich die PROMPT_COMMANDVariable und die rcfile.txtDatei verwendet habe, die in der Frage erwähnt wurden. Sie können den Befehl ausführen

gnome-terminal -e "bash --rcfile rcfile.txt"

rcfile.txtDabei handelt es sich um folgende Inhalte :

FILE=~/.bashrc && test -f $FILE && source $FILE

my_init_func() {
    # Insert desired commands here. In my case, history -r history.txt
    PROMPT_COMMAND=`echo $1`
    eval $PROMPT_COMMAND
    unset -f $FUNCNAME
}

PROMPT_COMMAND="my_init_func \'$PROMPT_COMMAND\'"

Dadurch wird die Standardquelle (sofern vorhanden) verwendet, .bashrcum alle anderen Terminalkonfigurationen beizubehalten. Anschließend wird eine Funktion definiert, die einmal ausgeführt wird, wenn die PROMPT_COMMANDin Bash verwendete Funktion aufgerufen wird. Anschließend wird sie aufgehoben und die ursprüngliche Funktion wiederhergestellt PROMPT_COMMAND.

verwandte Informationen