Qu'est-ce qu'un moyen rapide en ligne de commande pour basculer entre plusieurs annuaires pour l'administration système? Je veux dire, je peux utiliser pushd .
et popd
basculer, mais que se passe-t-il si je veux stocker des multiples et les parcourir, plutôt que de les supprimer en permanence du bas de la pile?
bash
shell-script
administration
Volomike
la source
la source
$CDPATH
peut-êtrecd -
après googler de cette question.cd
partout à la main. Était douloureux. Complétion automatique utilisée avec la touche de tabulation, cependant.Réponses:
Utilisez
pushd
puis les noms spéciaux pour les répertoires dans votre pile de répertoire:~1
,~2
, etc.Exemple:
Le moyen le plus efficace
pushd
consiste à charger votre liste de répertoires, puis à ajouter un autre répertoire pour qu'il soit votre répertoire actuel. Vous pouvez ensuite naviguer entre les numéros statiques sans affecter la position des répertoires dans votre pile.Il est également intéressant de noter que
cd -
vous mènera au dernier répertoire où vous étiez. Il en seracd ~-
.L'avantage de
~-
plus juste-
est que-
est spécifiquecd
, alors~-
est élargi par votre coquille de la même manière que~1
,~2
etc. sont. Cela s'avère pratique lors de la copie d'un fichier entre des chemins de répertoire très longs. par exemple:Ce qui précède est équivalent à:
la source
cd -
cd -
agit comme un ForthDROP DUP
, par exemple si on commence par dans le répertoire a , avec la pile abcd , acd -
change la pile en bbcd . Peut-être que c'est unbash
bug cependant, puisqu'un deuxièmecd -
change la pile en abcd . Nous pouvons en déduire quecd -
, outre le changement de pile, une structure de données distincte est utilisée pour stocker le répertoire précédent.cd -
utilise$OLDPWD
et rien d'autre.cd -
la fonctionnalité bash était antérieure , puis plus tard, ils ont ajouté une pile, mais craignaient de casser l'ancien code plus qu'ils ne souhaitaient une conception plus simple. Correction à la précédente,cd -
agit comme un ForthOLDPWD @ SWAP OLDPWD ! DUP .
Contrairement àcd foo
,cd -
affiche le nom du répertoire swappé.bash
La fonction intégréepushd
avec les options+
et-
peut faire pivoter la pile de répertoires. La syntaxe peut être un peu déroutante, peut-être parce que cette pile est un tableau de base zéro . Ces fonctions d'encapsulation simples parcourent la pile de répertoires:Test: configurez une pile de quatre répertoires.
Maintenant, / tmp est le répertoire actuel et la pile ressemble à ceci:
Passez au répertoire suivant de la pile (et montrez-le), quatre fois:
Sortie:
Passer au répertoire précédent dans la pile (et le montrer), quatre fois:
Sortie:
Une remarque sur
cd -
: La réponse de Wildcard a permis d'illustrer commentcd -
ne pas utiliser le tableau $ DIRSTACK (il utilise la variable $ OLDPW ), de sorte que celacd -
n'a pas d'effet sur $ DIRSTACK comme un swap basé sur une pile. Pour corriger cela, voici une simple fonction d' échange basée sur $ DIRSTACK :Tester:
Sortie:
la source
popd
, pour le supprimer sans changer de répertoire, faites-lepopd -n
. Pour vider la pile, faitesdirs -c
. Dommage que les concepteurs bash aient enterré de telles fonctions utiles dans une syntaxe non intuitive. Voir ci-man bash
dessouspushd
,dirs
etc.Je vous suggère d'installer FASD . Il vous permet d’accéder rapidement à tout répertoire dans lequel vous vous êtes déjà trouvé en ne tapant qu’une petite fraction de son nom.
Exemple: si vous avez visité le site
/home/someName/scripts/
, vous pouvez y accéder simplement en tapantz scr
par exemple. Il est bien plus pratique que de rappeler l'ordre dans la pile d'historique ou quelque chose de similaire.la source
Lorsque vous
cd
quelque part, Bash magasins l'ancien répertoire de travail une variable d'environnement,$OLDPWD
.Vous pouvez revenir à ce répertoire avec
cd -
, ce qui équivaut àcd "$OLDPWD"
.Vous pouvez naviguer entre les répertoires comme ceci:
la source
J'ai écrit un script nommé
xyzzy
pour faire ceci:La façon dont j'utilise ceci est de copier dans un
/usr/bin
dossier et ensuitechmod a+x
dessus. Ensuite, je modifie mes~/.bashrc
fichiers de compte utilisateur et racine pour inclure ces lignes en bas:Le «xy» est une forme abrégée de la commande permettant une saisie plus rapide.
Ensuite, je peux stocker le répertoire actuel dans la liste avec ...
... et répétez si nécessaire. Une fois que je remplis cette liste avec les répertoires dont j'ai besoin, ils y restent jusqu'à ce que je redémarre l'ordinateur car c'est à ce moment que / tmp est effacé. Je peux alors taper ...
... pour lister les répertoires actuellement enregistrés. Afin de passer à un répertoire, j'ai deux choix. Une option consiste à spécifier le chemin par index (et c'est un index basé sur 1) comme suit:
... qui basculerait vers le répertoire qui est le deuxième élément de la liste. Ou, je pourrais laisser le numéro d'index et juste faire:
... de le faire parcourir chaque répertoire selon mes besoins. Pour plus de commandes que vous pouvez faire, tapez:
Bien sûr, le travail est plus amusant avec les déclarations d'écho stupides que j'ai ajoutées.
Notez que xyzzy est une référence à l’ aventure textuelle de Collosal Cave , où taper xyzzy vous permet de basculer entre deux salles du jeu afin d’éviter les grues.
la source
J'utilise un petit script appelé z [lien] , qui pourrait également être intéressant, même s'il ne fait pas exactement ce que vous avez demandé.
la source
Il y a aussi
cd_func
de Petar Marinov, il a en groscd
un historique de 10 entrées: http://linuxgazette.net/109/misc/marinov/acd_func.htmlUtilisez simplement
cd --
pour afficher une liste des 10 derniers répertoires que vous avez éditéscd
etcd -N
(oùN
est l’index de l’entrée) pour y aller.la source
J'utilise principalement ZSH avec le profil oh-my-zsh . Vous pouvez taper dans un terminal la correspondance suivante:
Ensuite, vous pouvez simplement utiliser les flèches (haut et bas) pour parcourir tout l'historique du shell, qui ne montre que les entrées commençant par les caractères ci-dessus. Ainsi, par exemple, si vous êtes allé sur
/home/morfik/Desktop/
et/home/morfik/something/
, vous pouvez basculer très rapidement d'un répertoire à l'autre. Peu importe le nombre d'entrées que vous avez dans l'historique du shell, mais lorsque vous en avez beaucoup, utilisez simplement une meilleure expression, c'estcd /home/morf
-à- dire et appuyez ici sur les flèches haut / bas de votre clavier.Il existe également un autre moyen de parvenir à la solution. Dans ce cas, vous devez utiliser tmux et FZF . Ensuite, vous créez simplement un raccourci clavier, par exemple ctrl-r, et lorsque vous appuyez dessus, votre fenêtre actuelle sera divisée et vous verrez ceci:
Vous pouvez maintenant utiliser des expressions pour effectuer une recherche dans la liste. Je viens de taper
^cd /media
, ce qui ne retourne que les entrées qui commencent par la phrase. Bien sûr, vous pouvez simplement taper'cd 'home
pour faire correspondre la commande et également le nom du répertoire complet (pas le chemin, juste le nom):la source
Vous pouvez y arriver avec un tas de pseudonymes dans votre
~/.bashrc
(ou équivalent)L'objectif principal est de taper au minimum (par exemple,
d5
passer au répertoire numéro 5 du pool) pour basculer entre les répertoires du pool. Nous souhaitons également faciliter l'ajout / la suppression de répertoires au / du pool:Maintenant, chaque fois que vous poussez un répertoire sur la pile, il est ajouté au pool numéroté à la position 0 (répertoire actuel) et vous pouvez sauter (changer de répertoire) en utilisant très peu de frappe (
d<N>
) et vous pouvez afficher votre pool actuel numéroté à tout moment. le temps en tapant simplementd
.Quelques exemples d'utilisation de ces alias:
Affiche le répertoire numéroté, (le répertoire actuel est # 0)
Basculer entre les répertoires: utiliser
d<N>
Ajouter un nouveau répertoire au pool
Sauter un peu plus:
Supprimer / extraire le premier répertoire (actuel) du pool
la source
Si vous avez installé iselect , vous pouvez faire quelque chose comme ceci:
Cela vous donnera un menu navigable interactif à touches fléchées basé sur ncurses en plein écran pour sélectionner un répertoire
cd
.Si vous n'avez pas utilisé
pushd
la session actuelle du shell, la liste des répertoires du menu commence par une seule entrée, votre répertoire actuel. S'il n'y a qu'une entrée, cetdirselect
alias le seracd
sans l'écran du menu, de sorte qu'il ne fait rien (sauf empêchercd -
de faire quoi que ce soit d'utile)Pour ajouter un nouveau répertoire à la liste, utilisez
pushd dir
(oupushd -n dir
pour ajouter un répertoire sans lecd
modifier en même temps)Vous pouvez pré-renseigner la
pushd
pile en procédant comme suit dans votre.bashrc
ou~/.bash_profile
:Vous pouvez supprimer des entrées avec
popd
oupopd -n
.Voir
help pushd
,help popd
ethelp dirs
en bash pour plus d'informations. Et bien surman iselect
.BTW,
iselect
est probablement disponible pré-emballé pour votre distribution. C'est pour Debian et Ubuntu, etc., et probablement aussi pour d'autres.la source
Si vous utilisez 5 ou 10 répertoires et que vous ne vous souciez pas nécessairement des 5 ou 10 répertoires récemment utilisés , configurez des alias de commande tels que
Et donc, lorsque je veux aller au répertoire de la page d'accueil Apache, je tape simplement
cdw
comme j'ai répondu dans l' équivalent d'un alias pour un lien symbolique? .la source
J'utilise jump pour changer rapidement le répertoire de travail.
Pour ajouter le répertoire actuel:
Pour lister tous vos favoris:
par exemple:
Maintenant, vous pouvez facilement accéder à un autre répertoire:
Il supporte l'auto-complétion pour bash et zsh.
Edit (en réponse à @Joe): le binaire
jump-bin
est stocké dans/usr/local/bin
, et avec le script d’intégration bash (sur mon PC situé sur/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
), il crée une fonction bashjump
qui appellejump-bin
.la source
J'utilise
alias
pour naviguer. Si vous avez peu de répertoires fréquemment consultés, définissez simplement des alias. Par exemple,Alors simplement
va vous emmener à
/etc
.la source