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>