當前位置: 首頁>>技術教程>>正文


bash – iPython類似Shell的命令曆史記錄

,

問題描述

對於不在ubuntu上進行python編程的人來說,ipython是類固醇上的python shell,但是它具有令人驚歎的功能,它不僅可以基於已知名稱自動完成操作(即bash按下tab時的方式相同),但是如果您開始鍵入命令並按下,則它不會滾動瀏覽整個曆史記錄(例如bash),而隻會滾動顯示以相同字母組成的最近命令。

因此,如果您執行了一些長命令,例如scp -r -P 8000 -l user server.com:~/dir/to/copy ./,然後再執行其他幾個命令。如果您開始輸入scp並按下,bash會顯示之前顯示的命令,而不僅僅是滾動整個曆史記錄。

bash有這樣的擴展名嗎?或是否有提供這種功能的 shell ?

最佳思路

Bash也確實具有該功能,但默認情況下未啟用。您可以通過將其粘貼到~/.inputrc來將其綁定到上/下光標:

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

我更喜歡將其綁定到Ctrl + up /down上:

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

編輯:要保留ctrl+leftctrl+right完整地前後移動,還應在~/.inputrc文件中包括以下幾行:

# 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

次佳思路

嘗試按Ctrl + R並輸入幾個字母。它也以相反的順序工作。

第三種思路

並且不要忘記bash中出色的曆史記錄擴展快捷方式。 1個

我會在手冊頁中張貼一些節選,以防您沒有在手臂上刺青(或記住)。

   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.

我經常使用該功能來引用上一個命令的最後一個’word’。例如。,

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

在這兩種情況下,!$都匹配/foo/shmoo/adir.horribilus.foo


1 …取自csh。為了減輕bash功能盜竊的範圍,bash手冊頁說

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

因此,它是”similar”。其中任何一個都可能在cshtcsh中中斷。或您不使用的任何csh後代,因為它不如bash精彩。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/11704.html,未經允許,請勿轉載。