使用“ls -l ..$(which bash)”查看父文件夹

使用“ls -l ..$(which bash)”查看父文件夹

我检查了我正在处理的 bash

$ which bash
/usr/local/bin/bash
$ ls -l $(which bash)
lrwxr-xr-x 1 me 30 Oct 27 10:40 /usr/local/bin/bash -> ../Cellar/bash/4.4.23/bin/bash

然后我来查看bash的父目录usr/local/bin/

$ ls -l ../$(which bash)
ls: cannot access '..//usr/local/bin/bash': No such file or directory
$ ls -l ..$(which bash)
ls: cannot access '../usr/local/bin/bash': No such file or directory

不幸的是,我又犯了错误。

如何使用命令替换 $ 导航到 bash 的父文件夹?

答案1

您正在做的事情是尝试在不退出的情况ls下运行:..//usr/local/bin/bash

$ echo ../$(which bash)
..//usr/local/bin/bash

同时,当您使用 时ls -l ..$(which bash),结果取决于您当前的工作目录所在的位置,因为您正在相对寻址。

所以这个不应该给你任何错误(它寻​​找文件而不是父目录):

$ cd /usr
$ ls -ld ../$(which bash)

你必须使用dirname命令:

$ dirname $(which bash)
/bin

或者:

$ ls -ld $(dirname $(which bash))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin

当您的文件是链接时(例如您的情况下的 bash 和我的情况下的 sh ):

$ ls -ld $(dirname $(readlink -f $(which sh)))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin

答案2

从技术上讲, usingwhich bash并不总是返回bash您实际运行的版本(您可能正在运行另一个版本,但使用包含不同版本的路径)。在 Linux 上,您可以proc使用/proc/$$/exe$$进程 ID 或正在运行的 shell)从文件系统获取正在运行的 shell 的可执行文件,所以您想要的是

$(dirname $(readlink /proc/$$/exe))

相关内容