2016-07-04 10 views
4

Wenn Sie einen Befehl mit den gleichen Argumenten erneut ausführen möchten Sie etwas tun können:Re vorherigen Befehl mit verschiedenen Argumenten laufen

vim long_filename 
cat !$      #same as 'cat long_filename' 

Dies erspart wieder das vorherige Argument zu geben, wenn es übergeben wird zu cat.

aber wie würde ich Argumente übergeben, die nicht die gleichen zum letzten Laufe/script Befehl sind?

long_annoying_script_name arg1 arg2 
? arg3 arg4         #? signifies shortcut symbols such as '!$' 

Natürlich kann ich drücken Sie einfach die ‚nach oben‘ Pfeil und die Argumente löschen und die neuen Typ, aber gibt es einen kürzeren/schnelleren Weg?

Ich möchte keinen Alias ​​zuweisen.

Antwort

6

!:0 sollte den Trick tun. Von der zsh Dokumentation:

 Word Designators 
     A word designator indicates which word or words of a given command line 
     are to be included in a history reference. A `:' usually separates the 
     event specification from the word designator. It may be omitted only 
     if the word designator begins with a `^', `$', `*', `-' or `%'. Word 
     designators include: 

     0  The first input word (command). 
     n  The nth argument. 
    ^ The first argument. That is, 1. 
     $  The last argument. 
     %  The word matched by (the most recent) ?str search. 
     x-y A range of words; x defaults to 0. 
     *  All the arguments, or a null value if there are none. 
     x*  Abbreviates `x-$'. 
     x-  Like `x*' but omitting word $.

(Es mit bash funktioniert auch.) Es gibt auch !-1, wenn Sie, dass bequemes eingeben finden.

+0

+1 - eine Abkürzung für '!!: 0 arg3 arg4' Dokumentation: [Bash History Wortbezeichner] (https://www.gnu.org/software/bash/manual/html_node/Word-Designators.html # Word-Designators) –

+0

Funktioniert leider nicht in einem Skript ... – hdl

+0

@hdl: Was möchten Sie, dass es in einem Skript ausgeführt wird - beziehen Sie sich auf andere Teile des Skripts oder auf den Benutzerverlauf? – Ryan

Verwandte Themen