dirname
命令是 Unix/Linux 系统中用于获取给定路径中的目录部分的命令。它不会改变当前工作目录,而是简单地分析提供的路径字符串,并输出该路径的目录部分。
基本用法
-
命令格式:
dirname [OPTION]... PATH...
-
OPTION:通常,
dirname
命令不接受任何选项,但在某些系统中或特定版本的dirname
实现中可能会有选项。不过,在大多数标准 Unix/Linux 环境中,dirname
命令是不接受选项的。 -
PATH:这是你想要获取其目录部分的路径。它可以是绝对路径或相对路径。
示例
-
绝对路径
dirname /usr/bin/sort
输出:
/usr/bin
这里,
/usr/bin/sort
的目录部分是/usr/bin
。 -
相对路径
dirname ./myscript.sh
如果当前工作目录是
/home/user
,则输出:.
因为
./myscript.sh
的目录部分是.
,表示当前目录。 -
带有尾随斜杠的路径
dirname /usr/bin/
输出:
/usr/bin
即使路径以斜杠
/
结尾,dirname
也会去除尾随的斜杠和最后一个组件(如果存在的话),并返回剩余的目录部分。 -
空字符串或点(
.
)dirname '' dirname .
对于空字符串或仅包含
.
的路径,dirname
的行为可能因系统而异,但大多数情况下,它会返回.
,表示当前目录。
注意事项
- 当
dirname
处理的路径是符号链接时,它返回的是符号链接本身的目录部分,而不是符号链接指向的实际文件或目录的目录部分。 dirname
命令在处理路径时不会检查路径是否存在或是否可访问;它只是简单地分析路径字符串。- 在编写脚本时,
dirname $0
经常被用来获取脚本文件所在的目录路径。但是,如果脚本是作为符号链接被调用的,这种方法可能不会给出你期望的结果。为了获取实际脚本文件的目录,你可能需要编写更复杂的逻辑来解析符号链接。
结合使用
dirname
命令经常与其他命令一起使用,特别是在脚本中,以构建新的路径或进行目录相关的操作。例如:
script_dir=$(dirname "$0")
file_path="$script_dir/myfile.txt"
echo "File path: $file_path"
在这个例子中,dirname "$0"
用于获取脚本所在的目录路径,然后将其与文件名 myfile.txt
组合起来,形成完整的文件路径。