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")"; }

改变 ”。”适当的某个目录(也许是“~”)

相关内容