CD 到 bash 腳本中的 HISTORY 目錄或別名,例如 $(!!)

CD 到 bash 腳本中的 HISTORY 目錄或別名,例如 $(!!)

我經常想更改檔案系統上某個檔案的目錄,但我不確定該檔案在哪裡。

我像這樣搜尋它:

find -type f -name "myfile.txt"

為了簡單起見,我們可以說這會回傳一個結果,例如。

/some/super/long/path/that/i dont/want/to/type/myfile.txt

然後我通常會輸入:

cd $(dirname $(!!))

要切換到我正在搜尋的檔案的目錄...

無論如何,是否可以將其放入 shell 腳本或別名中,這樣我基本上可以輸入:

cdlast

它運行:

cd $(dirname $(!!))

使用外殼的歷史記錄?我已經嘗試過了,bash 腳本中似乎缺少 shell 歷史記錄。

答案1

fc -s再次運行之前的命令:

alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'

或使用eval "$(history -p !!)"

alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'

答案2

您可以使用別名。

alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'

確保其中有雙引號。如果命令替換的結果有空格,則它們不會被分割成單獨的單字;如果命令替換的結果有特殊字元(如*和 ) ,則它們會被解釋為通配符模式?

答案3

我會使用一個函數:

gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }

改變 ”。”適當的某個目錄(也許是“~”)

相關內容