zoukankan      html  css  js  c++  java
  • [转载]有些shell文件中为啥要用$(cd “$(dirname $0)“; pwd),pwd它不香吗

    $(cd "$(dirname "$0")",pwd) 解析

     

    xx.sh 文件内容如下:

    复制代码
    #!/bin/bash
    BIN_FOLDER=$(cd "$(dirname "$0")";pwd)
    echo $BIN_FOLDER
    PROJECT_FOLDER=$(cd "$(dirname "$BIN_FOLDER")";pwd)
    echo $PROJECT_FOLDER
    PYTHON_BIN=$PROJECT_FOLDER/.venv/bin/python
    echo $PYTHON_BIN
    复制代码

    BIN_FOLDER = $(cd "$(dirname "$0")",pwd) 解析:

    1、取当前运行脚本的所在路径: $0

    2、取当前脚本所在路径的父目录: dirname "$0"

    3、取返回的父目录的值: $(dirname "$0")

    4、cd到返回的父目录: cd "$(dirname "$0")"

    5、输出地址: cd "$(dirname "$0")",pwd

    6、取输出的地址,并赋值给BIN_FOLDER: BIN_

     

    有些shell文件中为啥要用$(cd “$(dirname $0)“; pwd),pwd它不香吗

    shell中dirname和pwd的笔记及用法

    1.dirname

    输入

    dirname是一种shell命令,参数只能有一个,可以是任意字符串(";"除外),这里要注意,dirname不会检查参数是不是文件或目录。比如:

    [root@xx /]# dirname .;
    [root@xx /]# dirname !;
    [root@xx /]# dirname c.txt;
    [root@xx /]# dirname a/b/c.txt;
    [root@xx /]# dirname a/b/c;
    [root@xx /]# dirname a/b/c/;
    [root@xx /]# dirname a/b/c/ ;
    [root@xx /]# dirname a/b/c/.;
    [root@xx /]# dirname a/b/c\d;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    输出

    感受一下

    [root@xx /]# .
    [root@xx /]# .
    [root@xx /]# .
    [root@xx /]# a/b
    [root@xx /]# a/b
    [root@xx /]# a/b
    [root@xx /]# a/b
    [root@xx /]# a/b/c
    [root@xx /]# a/b
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    特点

    我猜dirname处理输入的字符串(";“作为命令截止符不会处理)时,是从字符串的末尾往前处理,并将末尾到第一个”/“之间的所有字符(包括”/“字符)全部删除,然后返回剩余的字符;如果没有遇到”/“字符,那就返回”."。

    2.pwd

    输入

    pwd是不需要任何参数的,但如果非要加上参数也是能执行的,但参数会表示自己没有任何存在感,如:

    [root@xx /]# pwd
    [root@xx /]# pwd a
    [root@xx /]# pwd a b
    
    • 1
    • 2
    • 3

    输出

    感受一下

    [root@xx /]# /
    [root@xx /]# /
    [root@xx /]# /
    
    • 1
    • 2
    • 3

    特点

    特点就是简单,返回当前目录或者工作目录的绝对路径。这里有个需要注意的地方,假设目录/home/a/b/c下有个c.sh脚本,里面实现的是打印pwd命令的结果,而/home/a/b下有个b.sh脚本,里面实现的是调用c.sh脚本,那么打印的结果是/home/a/b

    3.总结

    在脚本文件中,pwd直接获取当前脚本文件对应的绝对路径时是有风险的,因为当其他脚本文件调用你时,pwd就不是你所在的绝对目录了,所以我们的$(cd “$(dirname $0)”; pwd)就应运而生啦!

  • 相关阅读:
    QA问答系统,QA匹配论文学习笔记
    HMM Viterbi算法 详解
    py2 to py3 return iterator
    git 的回退
    mysql之group_concat函数详解
    sqlserver系统表使用
    Spring事务配置的五种方式
    MySQL 触发器简单实例
    64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
    HSSFWorkbook和XSSFWorkbook的区别
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/13793288.html
Copyright © 2011-2022 走看看