Bash se souviendra de l'historique des commandes d'une session à l'autre, mais pas de la pile de répertoires créée avec pushd
. Est-il possible de se souvenir de la pile de répertoires également?
Bash se souviendra de l'historique des commandes d'une session à l'autre, mais pas de la pile de répertoires créée avec pushd
. Est-il possible de se souvenir de la pile de répertoires également?
Réponses:
Que diriez-vous d'utiliser la dirs -p
sortie?
Vous pouvez le sauvegarder .bash_logout
et le recharger avec un script mineur dans le dossier.bash_login
Voir plus à Directory Stack Builtins bash page.
pushd
et popd
pour vider dirs -p
un fichier sur chaque utilisation.
J'ai enfin trouvé un moyen de déterminer le shell dans lequel je me trouve de manière cohérente d'une session à l'autre: la variable d'environnement prise en SHELL_SESSION_ID
charge par le gestionnaire de sessions KDE pour Konsole (pas sûr des autres environnements de bureau). Cela dit, la solution que j'ai élaborée à partir de la réponse de l'utilisateur nik:
Dans .bashrc
, dans le code d'installation des shells interactifs, j'ai ajouté ceci:
# Don't remember directory stacks for subshells, just the top level
# shell.
if [[ -z "$BASH_SESSION_ID" ]]; then
# Get bash-session the X Windows session manager, if possible.
if [[ -n "$SHELL_SESSION_ID" ]]; then
export BASH_SESSION_ID=$SHELL_SESSION_ID
else
export BASH_SESSION_ID="DEFAULT"
fi
. ~/.bash_dirs
load_dirs
fi
BASH_SESSION_ID
est utilisé plutôt que directement, de SHELL_SESSION_ID
sorte que pour les environnements qui n'en ont pas SHELL_SESSION_ID
, quelque chose d'autre puisse être utilisé.
Le contenu de .bash_dirs
est ceci:
_DIRS_DIRS=~/.dirs
# Silently make sure ~/.dirs exists
\mkdir -p $_DIRS_DIRS
_DIRS_FILE=$_DIRS_DIRS/$BASH_SESSION_ID
save_dirs() {
\dirs -l -p > $_DIRS_FILE
}
load_dirs() {
# Start out with a fresh directory stack.
\dirs -c
# Make sure there's at least an empty file.
if [[ ! -f "$_DIRS_FILE" ]]; then
touch $_DIRS_FILE
fi
# Start out in the directory we left off at
for dir in $(cat $_DIRS_FILE) ; do
\cd $dir > /dev/null 2>&1
# Just need the first line
break
done
# Restore saved dir stack in reverse order.
for dir in $(cat $_DIRS_FILE | tac) ; do
# But don't duplicate the directory we left off at
if [[ $PWD != $dir ]]; then
\pushd -n $dir > /dev/null 2>&1
fi
done
}
# NOTE: aliases can't take parameters, so we have to alias to functions.
_dirs_pushd()
{
\pushd "$@"
save_dirs
}
alias pushd=_dirs_pushd
_dirs_popd()
{
\popd "$@"
save_dirs
}
alias popd=_dirs_popd
# In case 'dirs -c' is used.
_dirs_dirs()
{
\dirs "$@"
save_dirs
}
alias dirs=_dirs_dirs
.bash_dirs
pour le téléchargement en ligne de commande: pastebin.com/raw/FsAcG23N