簡體   English   中英

在 Bash 別名中使用 history 命令

[英]Using history command in Bash alias

所以我對 Bash 非常陌生,並且正在通過反復試驗學習 go。 我想知道為什么以下內容不起作用:

我在我的 bashrc 文件中定義了 function repeat

repeat () {
         history > /dev/null
         !-2
}

然后在同一個文件中調用它,如下所示:

alias .="repeat"

是的,我知道我正在劫持點運算符,但我有自己的別名(專門用於采購 ~/.bashrc)。 想法是能寫. 並讓它重復最后一個命令。 如果我在交互式 shell 中手動鍵入命令,則此方法有效,但在別名中無法像這樣工作。 不要介意它不能重復多次,我只想在解決該問題之前讓它工作。 當我打字時. 我得到以下 output:

bash: :-2: command not found

我認為history在非交互調用時不會從我的歷史文件中讀取,並且在其歷史中不包含任何命令,但是不,這會輸出我的歷史:

repeat () {
        history
        !-2
}

但是,我得到了相同的結果。 ! 命令似乎不起作用。

知道我做錯了什么嗎?

編輯:我現在按照我想要的方式工作(請告訴我是否有更優雅的解決方案)但我想擺脫要執行的命令,即我只想要命令本身的 output。 我想我會嘗試這樣的事情:

 19 repeat () {
 20         for ((i = 0; i<${1}; i++ ))
 21         do
 22                 $(fc -s) | tail -n +2
 23         done
 24 }
 25
 26 alias .="repeat 1"
 27 alias 1.="repeat 1"
 28 alias 2.="repeat 2"
 29 alias 3.="repeat 3"
 30 alias 4.="repeat 4"
 31 alias 5.="repeat 5"
 32 alias 6.="repeat 6"
 33 alias 7.="repeat 7"
 34 alias 8.="repeat 8"
 35 alias 9.="repeat 9"
 36 alias 10.="repeat 10"

但不幸的是它不起作用,它給了我錯誤的 output 然后當我再次嘗試時它進入了無限循環。 我如何實現這一目標?

您可以使用fc命令,該命令“用於列出或編輯並重新執行歷史列表中的命令”。 Bash手冊對此給出了一個例子。

一個有用的別名是r="fc -s" ,因此鍵入r cc運行以cc開頭的最后一個命令,鍵入r重新執行最后一個命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM