V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
patrickstar
V2EX  ›  Linux

mkdir 在 shell 脚本里如何识别~目录?

  •  
  •   patrickstar · 2016-07-16 15:21:31 +08:00 · 4710 次点击
    这是一个创建于 3084 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/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 脚本里正确解析 ~ 目录,记得以前看过,今天要用的时候死活想不起来啦
    9 条回复    2016-07-17 02:09:34 +08:00
    tracyone
        1
    tracyone  
       2016-07-16 15:37:16 +08:00   ❤️ 1
    $HOME
    notgod
        2
    notgod  
       2016-07-16 15:45:19 +08:00
    export TMP_DIR=$(~/.tangolog)

    没转义
    lxf1992521
        3
    lxf1992521  
       2016-07-16 19:16:04 +08:00
    估计是你的用户名中包含各种特殊字符,如空格、 TAB 、&、| 等,不然的话,不会出现这种情况的。
    所以,以防万一,对变量要加上引号:

    if [ ! -d "$TMP_DIR" ]
    then
    mkdir "$TMP_DIR "
    greenskinmonster
        4
    greenskinmonster  
       2016-07-16 19:31:33 +08:00 via Android
    先用 realpath 处理下
    EchoWhale
        5
    EchoWhale  
       2016-07-16 20:27:48 +08:00 via Android
    $HOME
    patrickstar
        6
    patrickstar  
    OP
       2016-07-16 21:30:36 +08:00
    @lxf1992521 用户名没有特殊字符,就 4 个英文字母
    @tracyone OK
    @notgod 好像不行
    lcj2class
        7
    lcj2class  
       2016-07-16 23:30:09 +08:00
    不知道 lz 遇到什么问题,我在 Mac 、 centos 上测试了下面的代码可以在家目录创建目录的:

    ```

    export ff=~/.haha


    if [ ! -d $ff ];then
    mkdir $ff
    fi
    ```
    raysonx
        8
    raysonx  
       2016-07-17 01:49:05 +08:00
    我在我自己的机器上拿楼主的脚本跑了一下,是正常工作的。
    从这句来看`mkdir $TMP_DIR`,$TMP_DIR 是会 Bash 被展开的,所以最好加上双引号,防止特殊符号注入。
    另外, if 是不需要的,`mkdir -p "$TMP_DIR"`可以代替。
    skydiver
        9
    skydiver  
       2016-07-17 02:09:34 +08:00
    https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html

    ~ 展开是 bash 的功能,你用的 /bin/sh 当然不行了……
    要么改成 /bin/bash 要么用$HOME
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:28 · PVG 06:28 · LAX 14:28 · JFK 17:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.