it-swarm.com.de

iPython Like-Befehlsverlauf für Shell

Für diejenigen von euch, die nicht python unter Ubuntu programmieren, ist ipython eine python Shell unter Steroiden, aber es hat diese erstaunliche Eigenschaft, dass es nicht nur anhand bekannter Namen automatisch vervollständigt wird (dh auf die gleiche Weise) Bash funktioniert, wenn Sie die Tabulatortaste drücken. Wenn Sie jedoch mit der Eingabe eines Befehls beginnen und die Taste nach oben drücken, wird nicht durch den gesamten Verlauf gescrollt (wie bei Bash), sondern nur durch die zuletzt ausgeführten Befehle, die mit derselben Zeichenfolge begonnen haben.

Wenn Sie also einen langen Befehl wie scp -r -P 8000 -l user server.com:~/dir/to/copy ./ gefolgt von mehreren anderen Befehlen ausgeführt haben. Wenn Sie scp eingegeben und gedrückt haben, zeigt bash den zuvor angezeigten Befehl an, anstatt nur durch den gesamten Verlauf zu scrollen.

Gibt es eine solche Erweiterung für bash? Oder gibt es eine Shell, die diese Art von Funktion bietet?

23
crasic

Bash hat diese Funktion auch, aber sie ist standardmäßig nicht aktiviert. Sie können es an den Cursor nach oben/unten binden, indem Sie es in ~/.inputrc einfügen:

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

Ich binde es lieber an Ctrl+ hoch/runter stattdessen:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

edit: Zum bewahren ctrl+left und ctrl+right Um sich in ganzen Worten vor und zurück zu bewegen, müssen Sie auch diese Zeilen in die ~/.inputrc -Datei aufnehmen:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for Word moving
"\e[1;5C": forward-Word
"\e[1;5D": backward-Word
"\e[5C": forward-Word
"\e[5D": backward-Word
"\e\e[C": forward-Word
"\e\e[D": backward-Word
25
ak2

Schlagen Sie Ctrl + Rund ein paar Buchstaben eingeben. Es funktioniert auch in umgekehrter Reihenfolge.

7
mgunes

Und vergessen Sie nicht die fantastischen Abkürzungen für die History-Erweiterung in Bash. 1

Ich poste einige Auszüge aus der Manpage, falls Sie sie nicht auf Ihren Arm tätowiert (oder auswendig gelernt) haben.

   Event Designators  
       An event designator is a reference to a command line entry in the  his‐
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob Shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Ich benutze häufig die Fähigkeit, auf das letzte Wort des vorherigen Befehls zu verweisen. Z.B.,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

In beiden Fällen stimmt der !$ mit /foo/shmoo/adir.horribilus.foo überein.


1... die aus csh entnommen wurden. Um den Umfang von Bashs Feature-Diebstahl einzudämmen, heißt es in der Bash-Manpage

   The Shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Es ist also "ähnlich". Dies kann in csh oder tcsh vorkommen. Oder welcher csh-Nachkomme Sie nicht verwenden, weil er nicht so schön ist wie bash.

6
belacqua