GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gnome-Terminal:Wie werden Symlinks des Arbeitsverzeichnisses beibehalten, wenn ein neuer Tab geöffnet wird?

Dieser Fehler wird auf Ubuntu Launchpad und GNOME Bugzilla verfolgt.

Da mich das vor allem bei nur wenigen Verzeichnissen nervt, nutze ich folgenden einfacheren Workaround.

Angenommen, Sie haben /home/username/work als Symlink zu /long/path/named/asdf . Also machen Sie cd ~/work Öffnen Sie im Gnome-Terminal eine neue Registerkarte und suchen Sie das Terminal, das den vollständigen Pfad meldet. Um dies zu beheben, fügen Sie einfach Folgendes in Ihren .bashrc ein :

cd ${PWD/\/long\/path\/named\/asdf/$HOME\/work}

Wenn gnome-terminal eine neue Shell startet, erhält es das aktuelle Verzeichnis mit $PWD, und wenn es /long/path/named/asdf enthält , wird diese Zeichenfolge durch $HOME/work ersetzt , und cd s in die resultierende Zeichenfolge. Wenn $PWD die Zeichenfolge nicht enthält, entspricht sie cd $PWD , was nichts tut.


Ich vermute, darauf gibt es keine wirklich gute Antwort. gnome-terminal findet bash das aktuelle Arbeitsverzeichnis von durch Untersuchen von /proc/<pid>/cwd , die die Symlinks erweitert hat (wahrscheinlich aus Sicherheitsgründen, wenn nichts anderes). Ich kenne keinen anderen Weg, wie ein Prozess das Arbeitsverzeichnis eines anderen Prozesses finden kann.

Als Problemumgehung gibt es einige Bash-Tricks, die Sie ausprobieren könnten, aber beachten Sie die WARNUNG unter! In .bashrc:

...
PROMPT_COMMAND='pwd >~/.bashlocal_saved_dir'
...

[ -n "$PS1" -a -f ~/.bashlocal_saved_dir ] && cd `cat ~/.bashlocal_saved_dir`
# end of .bashrc

Dies wird zwei Dinge tun. Erstens, jedes Mal, wenn bash den Prompt anzeigt, wird es zuerst sein aktuelles Arbeitsverzeichnis in die Datei .bashlocal_saved_dir schreiben in Ihrem Home-Verzeichnis. Zweitens wechselt bash beim interaktiven Start (im Gegensatz zum Ausführen eines Skripts) in das Verzeichnis, das in derselben Datei gespeichert ist. Das bedeutet, dass beim Starten einer neuen interaktiven Bash diese im selben Verzeichnis startet wie die Bash, die zuletzt ihre Eingabeaufforderung angezeigt hat. Beachten Sie, dass Sie die Eingabetaste drücken können, damit eine Bash ihre Eingabeaufforderung erneut anzeigt und sie somit zur letzten macht. :)

WARNUNG :Dies ist ein Hack, und ich habe ihn nur bis zu dem Punkt ausprobiert, an dem ich weiß, dass er funktioniert. Denken Sie an Kaugummi und Schnürsenkel. Es kann überraschende Effekte haben und wird sicherlich nicht so sauber funktionieren wie gnome-terminal Ansatz. Insbesondere wenn Sie viele Tabs gleichzeitig ausführen, die alle Hintergrundaufgaben erledigen, kann es sehr gut passieren, dass Sie beim Öffnen eines neuen Tabs im "falschen" Verzeichnis landen.


Linux
  1. Wie erstelle ich ein neues Fenster im aktuellen Verzeichnis in Tmux?

  2. Wie verfolgt Unix das Arbeitsverzeichnis eines Benutzers beim Navigieren im Dateisystem?

  3. Wie lässt sich das Terminal automatisch vervollständigen, wenn mehrere Dateien/Verzeichnisse vorhanden sind?

  4. So echoen Sie eine neue Zeile in Bash-Shell-Skripten

  5. Wie kann ein Bash-Skript das Verzeichnis kennen, in dem es installiert ist, wenn es mit . Operator?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

Wie drucke ich das Arbeitsverzeichnis mit dem Linux-Befehl pwd?

Wie werden Parameter eingestellt, wenn Bash-Skript an Bash übergeben wird?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist

Wie führe ich ein Bash-Skript über einen absoluten Pfad aus?