1. $(cd `dirname $0`;pwd)与直接使用pwd的区别

区别如下:

# 显示当前敲这个命令所在的目录,以绝对路径显示。
pwd
# 显示执行的脚本所在的目录,以绝对路径显示.
$(cd `dirname $0`;pwd)

例:编写tset.sh,脚本所在路径如下E:/Code/Shell/test.sh

# tset.sh
cur_dir=`pwd`
echo ${cur_dir}

current_dir=$(cd `dirname $0`;pwd)
echo ${current_dir}

分别在E:/CodeE:/Code/Shell各执行一次test.sh,得到的结果如下:
在这里插入图片描述

2. $(cd `dirname $0`;pwd)的释义

  • dirname $0:显示执行脚本所在的目录
    • dirname是获取文件或者文件夹所在的目录
    • $0为脚本名
  • cd `dirname $0`:进入到执行脚本所在的目录
    • ` ` 与 $()都表示命令替换,即` `与 $()里的内容是一条命令
  • pwd:显示当前工作目录(cd执行后的)
$(cd `dirname $0`;pwd)

3. $(cd `dirname $0`;pwd)的用法

因为pwd显示的是当前敲这个命令所在的目录,所以将pwd命令放在shell脚本中会留下坑。
如果想要获取执行脚本所在的目录,而不在执行脚本所在的目录敲pwd命令,得到的就不是想要的结果,所以shell脚本中都使用$(cd `dirname $0`;pwd)来获取脚本所在的目录,确保无误。

例:编写tset.sh,脚本所在路径如下E:/Code/Shell/test.sh

# tset.sh
# 脚本所在目录
current_dir=$(cd `dirname $0`;pwd)
echo ${current_dir}

# 脚本所在目录的上级目录
parent_dir=$(cd $(dirname ${current_dir});pwd)
echo ${parent_dir}

分别在E:/CodeE:/Code/Shell各执行一次test.sh,得到的结果如下:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐