cd -
peut passer au dernier répertoire visité. Pouvons-nous visiter plus d'histoire autre que le dernier?
La commande que vous recherchez est pushd
et popd
.
Vous pouvez afficher un exemple de travail pratique de pushd
et popd
de ici .
mkdir /tmp/dir1
mkdir /tmp/dir2
mkdir /tmp/dir3
mkdir /tmp/dir4
cd /tmp/dir1
pushd .
cd /tmp/dir2
pushd .
cd /tmp/dir3
pushd .
cd /tmp/dir4
pushd .
dirs
/tmp/dir4 /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1
Vous n'avez pas spécifié quel shell vous utilisez, alors laissez-le excuser pour annoncer ZSH.
Oui, nous avons plus d'histoire pour cd
, à savoir cd -2
, cd -4
, etc. Très pratique est cd -
TAB, en particulier avec le système d'achèvement et les couleurs activées:
C'est ce que j'ai dans .zshrc:
setopt AUTO_PUSHD # pushes the old directory onto the stack
setopt PUSHD_MINUS # exchange the meanings of '+' and '-'
setopt CDABLE_VARS # expand the expression (allows 'cd -2/tmp')
autoload -U compinit && compinit # load + start completion
zstyle ':completion:*:directory-stack' list-colors '=(#b) #([0-9]#)*( *)==95=38;5;12'
Et le résultat:
Répondre à votre question concernant "plus d'histoire". Non le cd -
Fonctionnalité de Bash ne prend en charge qu'un seul répertoire que vous pouvez "retourner" à nouveau à. Comme @Ramesh stipule dans sa réponse. Si vous voulez une histoire plus longue de répertoires, vous pouvez utiliser pushd
et popd
pour enregistrer un répertoire ou revenir à un précédent.
Vous pouvez également voir la liste de ce qui est actuellement dans la pile avec la commande dirs
.
Une explication détaillée peut être trouvée à partir de cette réponse intitulée: Comment utiliser des commandes Poussée et POPD? .
Vous pouvez installer et utiliser mon Dirhistory utilitaire pour bash.
Fondamentalement, c'est un démon qui collecte les modifications de répertoire de toutes vos coquilles et un programme CDK qui affiche l'historique et vous permet de choisir n'importe quel répertoire pour passer à (donc vous n'êtes pas limité à une pile).
Le script ACD_FUNC.SH Ce que vous décrivez exactement. Essentiellement elle surcharge la fonction cd
et vous permet de taper cd --
Pour obtenir une liste de répertoires précédemment visités, à partir duquel vous pouvez sélectionner le numéro. Je trouve très difficile d'utiliser Bash sans que ce soit, et sa première chose que j'installe sur un nouveau système.
D'autres ont déjà couvert certaines solutions intéressantes. Il y a quelque temps, j'ai créé ma propre solution à un problème connexe qui pourrait être rapidement modifié pour faire "Histoire directe". Je voulais fondamentalement "étiqueter" quelques répertoires couramment utilisés et recherchés tous Open shells pour les voir, et pour eux de persister entre les redémarrages.
#dir_labels
#functions to load and retrieve list of dir aliases
function goto_complete {
unset dir_labels
declare -A dir_labels
{
while read line; do
ll_pre="${line%% *}"
ll_dir="${line#* }"
dir_labels["$ll_pre"]="$ll_dir"
done
} < ~/.dir_labels
unset ll_pre
unset ll_dir
local cur possib
cur="${COMP_WORDS[COMP_CWORD]}"
possib="${!dir_labels[@]}"
COMPREPLY=( $(compgen -W "${possib}" -- ${cur}) )
}
complete -F goto_complete goto
function goto {
unset dir_labels
declare -A dir_labels
{
while read line; do
ll_pre="${line%% *}"
ll_dir="${line#* }"
dir_labels["$ll_pre"]="$ll_dir"
done
} < ~/.dir_labels
unset ll_pre
unset ll_dir
if [ $# -gt 0 ]; then
key="$1"
else
key=default
fi
target="${dir_labels[$key]}"
if [ -d "$target" ]; then
cd "$target"
echo "goto $key: '$target'"
else
echo "directory '$target' does not exist"
fi
}
function label {
unset dir_labels
declare -A dir_labels
{
while read line; do
ll_pre="${line%% *}"
ll_dir="${line#* }"
dir_labels["$ll_pre"]="$ll_dir"
done
} < ~/.dir_labels
unset ll_pre
unset ll_dir
if [ $# -gt 0 ]; then
target="$1"
else
target="default"
fi
dir_labels["$target"]=$PWD
for i in "${!dir_labels[@]}"; do
echo "$i ${dir_labels[$i]}"
done > ~/.dir_labels
}
Fondamentalement je ferais juste label foo
Pour appeler le répertoire actuel foo
, puis à partir de n'importe quelle coquille, goto foo
Whould cd
directement là. Argument vide: label
créerait une cible par défaut pour goto
.
Je n'ai pas dérangé la mise en œuvre de la suppression automatisée des alias, mais sinon, je l'utilise toujours sous une forme légèrement modifiée.
Vous pouvez utiliser ma fonction "Historique de CD" de http://fex.belwue.de/fstools/bash.html
Il se souvient de chaque répertoire où vous avez été et avec "CDH", vous verrez une liste des 9 derniers annuaires. Il suffit d'entrer le numéro et vous êtes de retour dans ce répertoire.
Exemple:
[.____] Framstag @ WUPP: /: cDH[. ____] 1: /USR/Local/bin 2: /var 3: / 4: /tmp/135_pana/1280[.]5: /tmp/135_pana 6: /tmp/weihnachtsfeier 7: /tmp []8: /Local/home/framstag Select: 4[.____] Framstag @ WUPP:/TMP/135_PANA/1280:
cDH fonctionne avec Autocd AKA "CD sans CD": vous n'avez pas à taper CD ou BRUPD.
Voir la fonction CDH dans "Shell Programming, 4e" à la page 312. Il garde l'historique dans un tableau.
Voici une version plus avancée: https://drive.google.com/open?id=0b4f-lr6inxqwq1ppvpuq3fsz2m
Il stocke l'historique dans le fichier CDHistFile et permet de passer au répertoire le plus récent contenant une chaîne, par exemple.
cd -src
Il s'installe sur la commande CD existante en effectuant un alias cd=_cd
Je voulais juste ajouter marques FZF comme solution possible.
Une fois installé, cela vous donne les commandes Mark et saut pour ajouter et rechercher Pour les répertoires favorables (oui, ce n'est pas exactement l'historique complet, seuls ceux que vous avez bookmarked vous-même).
Le problème que j'ai avec un comportement spécifique à la session Poussad/POPD. J'aimerais avoir la même pile sur une session de bash différente ou donc possible pour les marques FZF.
J'ai essayé la réponse @Mikeserv donné, mais cela ne fonctionnait pas vraiment pour moi. Je ne pouvais pas comprendre comment le réparer, alors je viens d'écrire le mien:
cd() {
# Set the current directory to the 0th history item
cd_history[0]=$PWD
if [[ $1 == -h ]]; then
for i in ${!cd_history[@]}; do
echo $i: "${cd_history[$i]}"
done
return
Elif [[ $1 =~ ^-[0-9]+ ]]; then
builtin cd "${cd_history[${1//-}]}" || # Remove the argument's dash
return
else
builtin cd "$@" || return # Bail if cd fails
fi
# cd_history = ["", $OLDPWD, cd_history[1:]]
cd_history=("" "$OLDPWD" "${cd_history[@]:1:${#cd_history[@]}}")
}
Ceci est également disponible en tant que GITUB GIST . Pour l'utiliser, il suffit de coller la fonction dans votre .bashrc
ou similaire, et vous pourrez faire des choses comme cd -5
Pour revenir à la 5e Direction de la publication de dernier. cd -h
vous donnera un aperçu de votre histoire.