我检查了我正在处理的 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))