Comment accéder à l'historique à la volée sous Unix?

12

Par exemple, si je fais un

mkdir thisismyfolder912

Je me souviens qu'il y a un moyen plus facile de changer thisismyfolder912que d'avoir à faire un

cd thisismyfolder912

Qu'est-ce que c'est et comment ça marche? De plus, quelles sont les autres façons de l'utiliser?

Lazer
la source
1
Utilisez la complétion TAB pour les commandes et les répertoires qui ne figurent pas dans votre liste d'historique récente. cd this<TAB>
inverser

Réponses:

10

Parlez-vous d'une expansion de l'histoire classique ou d'un traitement Readline? cd !$sur la ligne d'entrée suivante se substituera dans le dernier argument de la ligne précédente, ou M-.ou le M-_tirera en utilisant Readline.

jmb
la source
1
Postez sur une autre question qui discute Alt +.
Michael Mrozek
Je cherchais cd !$. "Extension de l'histoire classique ou traitement Readline" Je ne comprends pas exactement ce que vous voulez dire ...
Lazer
2
@Lazer !$est une extension de l'histoire ; le shell le traite pendant qu'il analyse votre commande. M-. est une frappe de ligne de lecture; readline est la bibliothèque qui gère chaque touche sur laquelle vous appuyez et qui voit que vous avez appuyé sur M-. et tape automatiquement le dernier argument de la dernière commande
Michael Mrozek
9

Si votre question concerne l'accès à l'historique des commandes, essayez cette commande bien nommée

history 

Vous pouvez également essayer Ctrl+ ret commencer à taper une commande dont vous essayez de vous souvenir que vous avez récemment tapé.

(reverse-i-search)`cd ': cd mydir/data/

Appuyez sur ESCpour sélectionner la commande ou quitter. Cela fonctionne pour moi sur SuSE au moins; pas sûr des autres distributions.

Banjer
la source
4
WHOA! Cela va vraiment changer ma vie. Va te faire foutre history | grep ...!
Oli
Ce n'est pas seulement lié à SuSE, je pense que c'est une fonctionnalité Bash :)
sakisk
Je viens de lire comment utiliser vipour gérer votre ligne de commande. Ça a l'air super cool. utiliser vi pour modifier les commandes shell
Banjer
7

C'est aussi simple que Alt+.

$ mkdir lasdfjalsdkjf
$ cd 

Alt + .

$ cd lasdfjalsdkjf
Umang
la source
Comment avez-vous obtenu la boîte fantaisie autour d'Alt? Je ne l'ai pas vu dans le guide d'aide.
Banjer
2
@Banjer: utilisez des <kbd></kbd>balises pour entourer la clé.
Lazer
@Banjer<kbd>
Michael Mrozek
Aussi, c'est la même chose que la réponse de jmb
Michael Mrozek
2

cela a toujours fonctionné pour moi:

mkdir thisismyfolder
cd $_
Sablonneux
la source
Attention cependant: se $!développe jusqu'au dernier mot que vous avez réellement tapé, se $_développe jusqu'au dernier mot après l'expansion - de sorte que vous puissiez echo /tmp/tmpfile*voir un tas de fichiers que vous souhaitez supprimer, mais rm $_n'en supprimerez qu'un seul.
jmb
1

Reprendre une astuce d'un autre fil, si vous mettez:

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

dans votre .bashrc, vous pouvez commencer à taper quelque chose de votre historique, puis appuyer sur la flèche vers le haut, puis plutôt que de parcourir votre historique élément par élément, il passera directement aux entrées précédentes qui commencent par ce que vous avez déjà tapé.

Je suppose que cela n'aide pas beaucoup avec l'exemple particulier donné dans la question, mais c'est une chose qui m'aide à accéder à l'historique à la volée.

frabjous
la source
1

Si vous utilisez bash, je suggère pushdet popd. Vous pouvez créer une pile de répertoires et le parcourir rapidement. Voir cet exemple:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$
lcipriani
la source
Si vous utilisez une invite abrégée, cela rend les articles plus lisibles. (Je fais référence à la suppression de l'utilisateur et des noms d'hôte. Je comprends que l'affichage du PWD au lieu de simplement $est utile lors de la démonstration pushd, etc.)
pause jusqu'à nouvel ordre.
1

Sur une note connexe, je recommande d'utiliser histverify dans bash. Mettez ceci dans votre ~ / .bashrc:

shopt -s histverify

Cela entraînera bash à imprimer la commande après avoir développé! $ Ou d'autres fonctions d'historique, et vous donnera une chance de l'examiner avant d'appuyer de nouveau sur enter pour l'exécuter. Pour moi, le test de santé mentale vaut la pression supplémentaire occasionnelle sur les touches. Je veux m'assurer que j'exécute la cd foocommande, pas rm -rf foocelle ...

J'utilise souvent l' Ctrl-Rapproche, ainsi que Alt-.(ce qui convient bien au scénario que vous décrivez). J'utiliserai! $ À l'occasion.

Ce sont des techniques très utiles à usage général.

Mais pour répondre à votre question spécifique:

Créer un répertoire et y insérer directement un CD est une combinaison tellement courante qu'il est utile d'avoir une fonction pour le boucler.

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Usage: mcd thisismyfolder

jmanning2k
la source
1

Si votre shell utilise readline (ce qui est le cas bash), vous pouvez faire quelque chose comme appuyer sur ATL+ .ensemble?

Dans la documentation GNU Readline :

yank-last-arg (M-. ou M-_)

Insère le dernier argument de la commande précédente (le dernier mot de l'entrée d'historique précédente). Avec un argument, se comporte exactement comme yank-nth-arg. Les appels successifs à yank-last-arg reviennent dans la liste d'historique, insérant tour à tour le dernier argument de chaque ligne.

Elitmiar
la source