Linux 获得脚本shell所在当前目录的方法

在linuix的Shell里运行,如果涉及到文件操作,必然要考虑当前目录是哪里? 因为不能保证用户一定在脚本所在的目录下运行。一个方案是将当前目录切换到脚本目录,另一个方案是脚本里获得脚本所在目录,然后使用绝对目录。无论哪种,都需要获得脚本所在的目录。本文介绍网上使用最多的一个方案。

代码

target_dir=$(cd $(dirname $0); pwd)

其中

  • dirname $0,取得当前执行的脚本文件的父目录
  • cd 切换到脚本文件的父目录
  • pwd 显示当前目录

测试脚本

如下脚本将在脚本目录下创建一个子目录logs,然后将当前时间输出到子目录下的now.txt里。

[root@rh6-1 ~]# cat /root/currentdir.sh
current_dir=$(cd $(dirname $0); pwd)
mkdir ${current_dir}/logs
date > ${current_dir}/logs/now.txt

运行效果

如下是分别在/root下运行以及在/下运行的效果。其中第二次运行时建目录时已存在的报错请忽略,同时也证明了是同一个目录。

[root@rh6-1 ~]# pwd
/root
[root@rh6-1 ~]# sh currentdir.sh
[root@rh6-1 ~]# cat logs/now.txt
Mon Apr 18 09:04:32 CST 2022
[root@rh6-1 ~]# cd ..
[root@rh6-1 /]# pwd
/
[root@rh6-1 /]# sh /root/currentdir.sh
mkdir: cannot create directory `/root/logs': File exists
[root@rh6-1 /]# cat /root/logs/now.txt
Mon Apr 18 09:04:53 CST 2022
[root@rh6-1 /]#