J'utilise un gestionnaire de fenêtres de carrelage et je suis passé de gnome-terminal
Avec plusieurs onglets sur plusieurs urxvt
instances gérées par le gestionnaire de fenêtres. L'une des fonctionnalités que je manque est la possibilité d'ouvrir un nouveau terminal qui par défaut dans le répertoire de travail du dernier.
En bref: J'ai besoin d'un moyen d'ouvrir une nouvelle URXVT (BASH) qui par défaut à $ PWD de la dernière utilisation utilisée.
La seule solution qui me vient à l'esprit est de sauvegarder le chemin actuel sur chaque cd
avec quelque chose comme ceci:
echo $PWD > ~/.last_dir
et restaurer le chemin sur le nouveau terminal de cette manière:
cd `cat ~/.last_dir`
Je peux rechercher la deuxième commande en .bashrc
mais je ne sais pas comment exécuter le premier sur chaque changement de répertoire :)
Toute solution plus simple qui n'implique pas screen
ou tmux
Usage est la bienvenue.
Je vois trois solutions utilisant .last_dir
. Vous pouvez placer le echo $PWD > ~/.last_dir
Soit:
Dans une fonction spéciale qui serait une enveloppe pour cd
:
function cd_
{
[[ -d "$@" ]] || return 1
echo "$@" > ~/.last_dir
cd "$@"
}
Placez ceci dans votre ~/.bashrc
puis utiliser cd_
Au lieu de CD Chaque fois que vous souhaitez que votre nouveau répertoire de travail soit stocké.
Dans ton $Prompt_COMMAND
(non recommandé):
Prompt_COMMAND="$Prompt_COMMAND; pwd > ~/.last_dir"
Vous pouvez tester cela directement depuis le terminal ou le placer dans ~/.bashrc
. Cette solution déclenche toutefois un disque écrit à chaque fois que l'invite apparaît, ce qui pourrait causer des problèmes - mais d'autre part, .last_dir
contiendrait l'annuaire actuel, peu importe la façon dont vous êtes arrivé là-bas.
Dans une personnalisation Script d'extension PERL pour rxvt
. Je n'y ai jamais créé moi-même, mais vous pouvez trouver de nombreux exemples sur le Web.
J'utilise actuellement cette version de # 1 solution
# save path on cd
function cd {
builtin cd $@
pwd > ~/.last_dir
}
# restore last saved path
if [ -f ~/.last_dir ]
then cd `cat ~/.last_dir`
fi
à l'intérieur de mon .zshrc
C'est en fait assez trivial; Si vous exécutez urxvt
de votre fenêtre existante urxvt
, la nouvelle fenêtre se trouve dans le même répertoire. J'ai dup
aliased à urxvt &
Pour cette raison. Si vous voulez qu'il soit lié à une touche de raccourci, vous pouvez utiliser la commande bind
de Bash. Par exemple, pour le lier à F1:
$ bind '"\e[11~": "urxvt &\n"'
Il suffit d'ajouter . /etc/profile.d/vte.sh
dans ton ~/.bashrc
Pour obtenir la même fonctionnalité
Bien sûr, il s'agit d'une approche de travail pour modifier le comportement cd
, mais j'aimerais montrer une solution plus simple. Dans le homme bash (1) J'ai trouvé que si un interactif bash sort il exécute ~/.bash_logout
s'il existe. Donc, au lieu de stocker le chemin à chaque invocation de cd
Le dernier chemin peut être enregistré à la sortie.
Mon ~/.bash_logout
est très simple:
echo $PWD >~/.lastdir
Et quelque part dans mon .bashrc
J'ai placé cette ligne:
[ -r ~/.lastdir ] && cd $(<~/.lastdir)
Très souvent, j'utilise plusieurs fenêtres terminales à la fois, chacune avec plusieurs onglets. Par exemple: une fenêtre pour les onglets de développement de code source, une fenêtre pour les fichiers latex, une fenêtre pour l'exécution et des scripts R, etc. Dans une seule fenêtre, je souhaite qu'un nouveau terminal à onglets passe au répertoire qui est utilisé en dernier dans cette fenêtre (Cela fonctionnait dans le passé, mais avec la nouvelle version de Gnome, il ne l'est pas). La solution sale suivante fonctionne bien pour moi. J'ai mis cela dans .CASHRC.
dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] && {
savdir=`cat $dirfilename`
cd "$savdir"
}
function cd ()
{
builtin cd "$@"
echo $PWD > $dirfilename
}