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:/Code和E:/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:/Code和E:/Code/Shell各执行一次test.sh,得到的结果如下:

本文详细解析了在Shell脚本中使用`$(cd `dirname $0`; pwd)`与直接使用`pwd`命令的区别。前者用于获取脚本的执行目录,不受当前工作目录影响,后者则显示命令执行时所在的目录。通过示例脚本`tset.sh`的运行结果,阐述了这两个命令在不同目录执行时的不同输出,并展示了如何利用$(cd `dirname $0`; pwd)获取脚本路径及上级目录,从而确保在不同路径下正确获取脚本相关路径。
427

被折叠的 条评论
为什么被折叠?



