Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
patrickstar
V2EX  ›  Linux

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

  •  
  •   patrickstar · Jul 16, 2016 · 5254 views
    This topic created in 3588 days ago, the information mentioned may be changed or developed.
    #!/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 replies    2016-07-17 02:09:34 +08:00
    tracyone
        1
    tracyone  
       Jul 16, 2016   ❤️ 1
    $HOME
    notgod
        2
    notgod  
       Jul 16, 2016
    export TMP_DIR=$(~/.tangolog)

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

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

    ```

    export ff=~/.haha


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

    ~ 展开是 bash 的功能,你用的 /bin/sh 当然不行了……
    要么改成 /bin/bash 要么用$HOME
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   940 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 19:30 · PVG 03:30 · LAX 12:30 · JFK 15:30
    ♥ Do have faith in what you're doing.