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.