GNU/Linux >> Tutoriels Linux >  >> Linux

gnome-terminal :comment conserver les liens symboliques du répertoire de travail lors de l'ouverture d'un nouvel onglet ?

Ce bogue est suivi sur Ubuntu Launchpad et GNOME Bugzilla.

Étant donné que cela m'ennuie principalement avec seulement quelques répertoires, j'utilise la solution de contournement plus simple suivante.

Supposons que vous ayez /home/username/work sous forme de lien symbolique vers /long/path/named/asdf . Alors vous faites cd ~/work dans gnome-terminal, ouvrez un nouvel onglet et recherchez le terminal indiquant le chemin complet. Pour résoudre ce problème, mettez simplement ce qui suit dans votre .bashrc :

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

Lorsque gnome-terminal démarre un nouveau shell, il obtient le répertoire courant avec $PWD, et s'il contient /long/path/named/asdf , il remplace cette chaîne par $HOME/work , et cd s à la chaîne résultante. Si $PWD ne contient pas la chaîne, il équivaut à cd $PWD , qui ne fait rien.


Je soupçonne qu'il n'y a pas vraiment de bonne réponse à cela. gnome-terminal trouve bash répertoire de travail actuel en inspectant /proc/<pid>/cwd , dont les liens symboliques sont développés (probablement pour des raisons de sécurité, si rien d'autre). Je ne connais pas d'autre moyen pour un processus de trouver le répertoire de travail d'un autre processus.

Pour contourner ce problème, vous pouvez essayer quelques astuces bash, mais consultez l'AVERTISSEMENT dessous! Dans .bashrc :

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

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

Cela fera deux choses. Tout d'abord, chaque fois que bash affiche l'invite, il écrira d'abord son répertoire de travail actuel dans le fichier .bashlocal_saved_dir dans votre répertoire personnel. Deuxièmement, lorsque bash démarre de manière interactive (par opposition à l'exécution d'un script), il passe au répertoire stocké dans ce même fichier. Cela signifie que lorsque vous démarrez un nouveau bash interactif, il démarrera dans le même répertoire que le bash qui a affiché son invite en dernier. Notez que vous pouvez appuyer sur Entrée pour qu'un bash réaffiche son invite, ce qui en fait le dernier. :)

AVERTISSEMENT :Ceci est un hack, et je ne l'ai essayé que jusqu'au point où je sais que cela fonctionne. Pensez au chewing-gum et aux lacets. Cela peut avoir des effets surprenants et ne fonctionnera certainement pas aussi proprement que gnome-terminal approche. En particulier, si vous exécutez de nombreux onglets à la fois, tous effectuant des tâches en arrière-plan, vous pouvez très bien vous retrouver dans le "mauvais" répertoire lors de l'ouverture d'un nouvel onglet.


Linux
  1. Comment créer une nouvelle fenêtre sur le répertoire actuel dans Tmux ?

  2. Comment définir les paramètres lorsque Pipe Bash Script to Bash ?

  3. Comment faire écho à une nouvelle ligne dans les scripts shell bash

  4. Comment définir le répertoire de travail du processus parent ?

  5. Comment minimiser la frappe lors du changement fréquent de répertoires ?

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment imprimer le répertoire de travail à l'aide de la commande Linux pwd ?

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Comment exécuter un script bash via un chemin absolu ?

Comment dissocier tous les liens symboliques sous le répertoire ?