如何将mkdir创建的目录路径赋值给Shell脚本变量?
获取mkdir创建目录的准确路径并存储到变量
问题根源
mkdir -p 默认不会输出创建的目录路径,所以直接用 a=$(mkdir -p -- "$path") 得到的是空变量,这是正常现象。
解决方案
方法1:用realpath/readlink转绝对路径
如果你的系统支持 realpath(大部分现代Linux发行版都有),可以在创建目录后获取其绝对路径:
mkdir -p -- "$path" a=$(realpath -- "$path")
如果没有realpath,可以用readlink -f(GNU coreutils自带):
mkdir -p -- "$path" a=$(readlink -f -- "$path")
这两种方式都能把相对路径、带符号链接的路径转换成标准的绝对路径,适合后续权限设置等操作。
方法2:利用GNU mkdir的-v选项输出路径
GNU版本的mkdir支持-v(verbose)选项,执行时会打印创建的目录信息,我们可以提取其中的路径:
a=$(mkdir -pv -- "$path" | awk '{print $NF}')
mkdir -pv会输出类似mkdir: created directory '/home/rakesh/foo.com'的内容,awk '{print $NF}'会取该行最后一个字段,也就是我们需要的路径。
方法3:用cd+pwd获取绝对路径
这是兼容性最好的方法,几乎所有类Unix系统都支持:
mkdir -p -- "$path" a=$(cd "$path" && pwd)
原理是先进入目标目录,再用pwd输出当前绝对路径,即使原$path是相对路径,也能得到正确的绝对路径。
注意事项
- 所有涉及
$path的地方都要用双引号包裹,避免路径包含空格、特殊字符时出现错误。 - 如果
$path是已经存在的目录,上述方法依然有效,会返回该目录的绝对路径。
内容的提问来源于stack exchange,提问作者Rakesh Vijayan
相关产品推荐
相关产品推荐

