
如何自訂 Bash 以使上下鍵與 cmd 中的相同?
例如
$echo command1
$echo command2
$echo command3
$echo command4
在 Bash 和 cmd 中,按↑, ↑, ↑,ENTER將運轉echo command2
。
但是,隨後在 cmd 中按向下鍵將直接轉到後面的命令,即echo command3
。在 Bash 中按下向下鍵不會執行任何操作。 cmd 會保留時間點歷史記錄(類似 Web 瀏覽器中的「後退」和「前進」按鈕),但 Bash 不會。
與 cmd 類似,在 cmd 中按向上鍵兩次會返回echo command1
,而在 Bash 中執行此操作會返回echo command3
。
很多時候,我希望原諒我之前按順序輸入的一些命令鏈。在 cmd 中,我可以滾動歷史記錄到序列的第一個,↓然後ENTER,,,,,,,,... ,這真的很方便。↓ENTER↓ENTER
但是我在 Bash 中找不到類似的方法來做到這一點。是否可以~/.inputrc
透過某種方式修改文件或其他文件來實現此目的?
答案1
雖然我個人不想這樣做,因為我已經習慣了 bash 歷史,但我可以理解為什麼人們會想要這樣做。我之前曾為一位同事研究過這個問題,他是 *nix 的新手,想要在 xterm 中實現類似 DOS 的功能,然後,就像現在一樣,似乎沒有解決方案。
我剛剛進行了另一次廣泛的搜索,除了以下內容之外,找不到任何明顯的東西:
- 多塞姆,這不完全是你所追求的,而且;
- 使用 shell 腳本讓你的 Linux 命令列像 DOS 一樣運作,但連結似乎有些斷斷續續,而且這可能不是您真正想要的。此連結僅提供方法替代透過使用自訂腳本將 Unix 命令替換為 DOS 命令。
奇怪的是,有很多方法可以讓 cmd 更像 bash,例如,Windows 命令提示字元的類似 Bash 歷史記錄的功能,但可悲的是不是相反。
主要問題是,(過於)簡單地說,遊標鍵功能(以及它如何與歷史記錄交互)內置於 Bash 源代碼中,並且腳本、別名和 shell 函數無法覆蓋這一事實1。你需要的是重寫bash,內建了不同的[可切換? ]遊標鍵功能,如果您願意的話,可以說是一種「DOSBash」。
也許存在迎合利基市場的機會,並且最終有人會滿足這一需求,但我不會屏住呼吸。
1如果我錯了,並且可以通過簡單的資源文件更改來覆蓋遊標鍵功能,如果有人能糾正我的話,我將很高興。
答案2
我使用的技巧就是簡單地重複相同數量的↑:
$ echo command1
$ echo command2
$ echo command3
$ echo command4
echo command 2
如果我想重複從到 的序列echo command4
,我只需按↑3 次到達echo command2
,然後再按 3 次到達echo command3
,再按 3 次為echo command4
。
因此,如果您透過點擊 N 次返回了歷史記錄中的 N 項↑,則再次點擊 N 次將讓您每次都進入下一個命令,因為您執行的新命令已被插入。