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