在 Bash 中,如何从上一个命令的最后一个参数中获取目录路径

在 Bash 中,如何从上一个命令的最后一个参数中获取目录路径

我经常需要这样做。例如:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd /etc/pam.d/  # Figure I should just go to the directory

现在,当最后一个参数是文件路径时,有没有办法获取它的目录?我希望得到这样的结果:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd $dir # <-- something that returns /etc/pam.d in this case

我之所以问这个问题,是因为我最近意识到这个$_变量变得有用了。想知道是否还有其他命令行功能可能会派上用场。

答案1

虽然我会用BillThor的答案,有一个纯粹的 bash 答案:

$ ls /etc/pam.d/sudo
$ cd !$:h

历史互动在 bash 手册中

答案2

bash 历史记录实际上是一个列出以前执行过的命令的文本文件 - 它不包含任何说明这些命令正在做什么以及传递了什么类型的参数的元数据。

所以 $_ 只包含最后一个空格后面的内容。

我认为答案是否定的,没有任何办法用 bash 来做到这一点,您可能需要一个自定义 shell。

答案3

尝试

 $(dirname $_)

这将返回最后一个参数上方的目录。.如果没有目录组件,则返回。此外,如果参数类似于/etc/pam.d/,它将返回/etc

将以下内容添加到您的.profile文件中将允许您使用该命令执行您想要的操作cdx

alias cdx='cd $(dirname $_)' 

相关内容