技术解析

mkdir 在 shell 脚本里如何识别~目录?
0
2021-07-02 19:18:58
idczone
#!/bin/sh

# ~扩展在变量扩展前面进行
export TMP_DIR=~/.tangolog

if [ ! -d $TMP_DIR ]
then
mkdir $TMP_DIR
# mkdir "$TMP_DIR" 也不对
fi


把 export TMP_DIR=~/.tangolog 改为 export TMP_DIR=/home/xxx/.tangolog 即可,否则就无法创建目录(~没有解析对)

请问如何才能在 shell 脚本里正确解析 ~ 目录,记得以前看过,今天要用的时候死活想不起来啦
$HOME

export TMP_DIR=$(~/.tangolog)
没转义

估计是你的用户名中包含各种特殊字符,如空格、 TAB 、&、| 等,不然的话,不会出现这种情况的。
所以,以防万一,对变量要加上引号:
if [ ! -d "$TMP_DIR" ]
then
mkdir "$TMP_DIR "

先用 realpath 处理下

$HOME

用户名没有特殊字符,就 4 个英文字母
OK
好像不行

不知道 lz 遇到什么问题,我在 Mac 、 centos 上测试了下面的代码可以在家目录创建目录的:
```
export ff=~/.haha

if [ ! -d $ff ];then
mkdir $ff
fi
```

我在我自己的机器上拿楼主的脚本跑了一下,是正常工作的。
从这句来看`mkdir $TMP_DIR`,$TMP_DIR 是会 Bash 被展开的,所以最好加上双引号,防止特殊符号注入。
另外, if 是不需要的,`mkdir -p "$TMP_DIR"`可以代替。

https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html
~ 展开是 bash 的功能,你用的 /bin/sh 当然不行了……
要么改成 /bin/bash 要么用$HOME

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服