GNU/Linux >> Znalost Linux >  >> Linux

gnome-terminal:jak zachovat symbolické odkazy pracovního adresáře při otevírání nové karty?

Tato chyba je sledována na Ubuntu Launchpad a GNOME Bugzilla.

Protože mě to otravuje hlavně s několika adresáři, používám následující jednodušší řešení.

Předpokládejme, že máte /home/username/work jako symbolický odkaz na /long/path/named/asdf . Takže uděláte cd ~/work v gnome-terminálu otevřete novou kartu a najděte terminál hlásící úplnou cestu. Chcete-li to opravit, vložte do .bashrc následující :

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

Když gnome-terminal spustí nový shell, získá aktuální adresář s $PWD, a pokud obsahuje /long/path/named/asdf , nahradí tento řetězec řetězcem $HOME/work a cd s na výsledný řetězec. Pokud $PWD neobsahuje řetězec, je ekvivalentní cd $PWD , která nic nedělá.


Domnívám se, že na to neexistuje žádná skutečně dobrá odpověď. gnome-terminal najde bash aktuální pracovní adresář pomocí kontroly /proc/<pid>/cwd , který má rozšířené symbolické odkazy (asi z bezpečnostních důvodů, když už nic jiného). Neznám jiný způsob, jak by jeden proces mohl najít pracovní adresář jiného procesu.

Jako řešení existuje několik triků s bash, které můžete vyzkoušet, ale podívejte se na VAROVÁNÍ níže! V .bashrc:

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

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

To udělá dvě věci. Za prvé, pokaždé, když bash zobrazí výzvu, nejprve zapíše svůj aktuální pracovní adresář do souboru .bashlocal_saved_dir ve vašem domovském adresáři. Za druhé, když se bash spustí interaktivně (na rozdíl od spuštění skriptu), změní se na adresář uložený ve stejném souboru. To znamená, že když spustíte nový interaktivní bash, spustí se ve stejném adresáři jako bash, který naposledy zobrazil jeho výzvu. Všimněte si, že můžete stisknout Enter a způsobit, že bash znovu zobrazí jeho výzvu, takže bude poslední. :)

UPOZORNĚNÍ :Toto je hack a zkoušel jsem to jen do té míry, že vím, že to funguje. Myslete na žvýkačku a tkaničky. Může mít překvapivé účinky a určitě nebude fungovat tak čistě jako gnome-terminal přístup. Zejména, pokud máte spuštěno mnoho karet najednou a všechny děláte úkoly na pozadí, můžete velmi dobře skončit ve „špatném“ adresáři při otevírání nové karty.


Linux
  1. Jak vytvořit nový adresář v Linuxu

  2. Jak může bash skript znát adresář, ve kterém je nainstalován, když je zdrojem . operátor?

  3. Jak nastavím pracovní adresář nadřazeného procesu?

  1. Jak získám absolutní adresář souboru v bash?

  2. Jak zkopírovat adresáře do adresáře pomocí instalace v bash?

  3. Jak spustit bash skript?

  1. Jak vytvořit nové okno v aktuálním adresáři v Tmux?

  2. Jak Unix sleduje pracovní adresář uživatele při navigaci v systému souborů?

  3. Jak spustit bash skript přes absolutní cestu?