Je semble vous rappeler que où qui obtient le travail fait mais pas comme je veux le faire. p> < fort> Est-ce que quelqu'un connaît ce raccourci insaisissable? strong> p> Si cela importe, j'utilise bash code> avait un raccourci Bang pour faire référence à quelque chose dans la même ligne. Je sais et utilise ! $ Code>, !! code> et amis régulièrement. Je me souviens de la lecture de pouvoir faire quelque chose comme ce qui suit: ! _ Code> représente la combinaison que je ne me souviens pas. (L'objectif de ce qui précède est de créer un répertoire et immédiatement CD code> sur le succès.) Google ne donne que des republies des 2 mêmes tables de référence qui n'ont pas cette combinaison. P> < p> En ce moment, j'utilise le moins efficace p> zsh code> avec oh-my-zsh code>, pas vanille bash code>. p> p>
4 Réponses :
mkdir tmp && cd "$_" is what you're looking for, I believe (you can drop the double quotes if you're sure that quoting is not needed).$_ expands differently in different contexts, but the one that matters here (from man bash , v3.2.51): expands to the last argument to the previous command, after expansion. Background:Note: the following discusses bash, but it seems to apply to zsh in principle as well.$_ is a so-called special parameter, which you'll find listed among others (without the $ prefix) in the Special Parameters section of man bash: Works both in interactive shells and in scripts. Works at the individual command level, not at the line level. By contrast, !-prefixed tokens (such as !$ to recall the most recent line's last token) relate to the shell's [command] history expansion (section HISTORY EXPANSION of man bash): By default they work only in interactive shells, but that can be changed with set -o history and set -o histexpand (thanks, @chepner)). Work at the line level (more accurately: everything that was submitted with one Enter keystroke, no matter how many individual commands or lines it comprised).
Qu'en est-il de cela:
mkdir foo; cd $_
la même syntaxe fonctionne dans ! # code> fait référence à la ligne de commande jusqu'à présent, et vous pouvez extraire des mots spécifiques de celui-ci: zsh < / code> aussi. p> p>
Fonctionne bien dans l'affaire à portée de main, mais le 1 code> dans ! #: 1 code> est un index absolu de jeton absolu i> du début du début de la ligne i>, ce qui signifie que la solution ne généralise pas bien; E.g., mkdir -p TMP / SUB && CD! #: 1 code> serait casser; Vous devriez faire attention et compter toutes les jetons sur la ligne pour trouver le bon indice. De plus, depuis la coquille développe i> la référence historique et stocke la commande développée i> dans l'historique (en plus de l'imprimer avant d'exécuter), vous ne pouvez pas revenir en arrière et éditer la commande comme dactylographié i> - par exemple, pour créer un autre dir. - Vous obtiendriez seulement la version développée i>. (suite ci-dessous).
(suite d'une ci-dessus) à condition que l'intention consiste à obtenir le i> i> last jeton i> (développé) (sinon, alors le ! # code > Solution-Based est nécessaire): tous ces problèmes s'éloignent lorsque vous utilisez $ _ code>, par exemple MKDIR -P TMP / SUB && CD "$ _" code> (i cendu double coté $ _ code>, pour être sûr). Je sais que l'OP cherchait un jeton d'expansion d'histoire, que vous avez fourni, mais étant donné la question intention i>, je pense $ _ code> est le meilleur choix.
Il y a une option shell ( histverify code>) qui vous permet de modifier la commande avant de l'exécuter. € _ code> seulement i> fonctionne si l'intention est d'utiliser le dernier argument. ! # code> peut nécessiter un peu plus de travail, mais peut fonctionner avec n'importe quelle ligne de commande que vous pourriez utiliser.
C'est un bon résumé, merci; Je ne savais pas sur shopt -s histverify code> - Handy (pour Bash; équivalent ZSH: setopt hist_verify code>). (Et, juste pour être clair: j'ai appris de votre message et de vos commentaires sur les miens.)
(vieille nouvelle, mais si quelqu'un d'autre atterrit ici, comme je l'ai juste fait)
op semblait rechercher où X et Y sont des index des mots de shell dans l'événement d'historique pour la ligne de courant p> x et y sont supposés se référer au début ou à la fin de la ligne -
respectivement - lorsque omis p> (garder à l'esprit que la fin de la ligne dans ce contexte est en réalité la survenue du Cela nous donne les variantes suivantes: p> ou, en prenant une étape supplémentaire: p> Ceci suppose que l'utilisateur peut problème potentiel se pose lorsque aliasing aide aux cas d'utilisation tels que ! # [x] [- y] code > Syntaxe ZSH P> ! # [x] [- y] code> appel d'événement dans la ligne) P>
! # code> ligne actuelle jusqu'à ! # code> p> p> p> p> p> p> p> P>
! # - y code> ligne actuelle up the y code> -Tème mot em> p> p> l>
! # x code> x code> -ème mot uniquement em> p> p> l>
! # x-y code> mots x code> via y code> p> p> li>
! # x - code> à partir de x code> -ème mot, jusqu'à ! # x - code> em> < / p> li>
ul> en réponse directe à l'exemple donné: h1>
/ tmp / $ {pwd: t} code> serait créé également et agissez comme une alternative à CD code> à si pour une raison quelconque ./ TMP < / code> n'a pas pu être créé (qui aurait échoué silencieusement) p> mkdir code> dans / tmp code> et est prêt à laisser des inutiles Les chemins sont générés (et laissés intacts) lorsque ./ TMP code> est parfaitement utilisable et choisi en fait p> / TMP / $ {$ {PWD: T} < / code> existe déjà et son contenu ne sont pas liés et ne pas être perturbé, d'où le pwd; ls code> p> Somecommand; mktmpd code> où normalement le! # 2-3 ne ferait plus référence aux paramètres appropriés TMP code> / tmp / $ {pwd: t} code> p> < P> Notez cependant que je ne préconise pas décidément que cette affaire d'utilisation est particulièrement utile (voire sa condition physique comme exemple, vraiment - mais je voulais souligner la particularité de l'alias depuis que je n'ai pas encore vu cela mentionné ailleurs) < / p> p>