shell中脚本路径的获取

很多情况下,我们会先获取当前脚本的路径,然后一这个路径为基准,去找其他的路径。通常我们是直接用 pwd 以期获得脚本的路径。实际上这样是不严谨的,pwd 获得的是当前 shell 的执行路径,而不是当前脚本的执行路径。

使用 dirname 命令再结合 pwd 可以准确地得到脚本的实际路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[user1@study ~]$ cat test.sh 
#!/bin/bash

echo $(pwd)

script_dir=$(cd $(dirname $0) && pwd)
echo ${script_dir}

[user1@study ~]$ bash test.sh
/home/user1
/home/user1
[user1@study ~]$ cd /tmp/
[user1@study tmp]$ bash ~/test.sh
/tmp
/home/user1
[user1@study tmp]$

结合使用 readlink -f 可以实现同样的效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[user1@study ~]$ cat test.sh 
#!/bin/bash

echo $0

script_dir=$(dirname $(readlink -f $0))
echo ${script_dir}

[user1@study ~]$ bash test.sh
test.sh
/home/user1
[user1@study ~]$ cd /tmp/
[user1@study tmp]$ bash ~/test.sh
/home/user1/test.sh
/home/user1
[user1@study tmp]$

在脚本中使用 basename 命令即可获得脚本文件的基名

1
2
3
4
5
6
7
8
9
10
11
12
13
[user1@study ~]$ cat test.sh 
#!/bin/bash

echo $0
echo $(basename $0)

[user1@study ~]$ bash test.sh
test.sh
test.sh
[user1@study ~]$ bash /home/user1/test.sh
/home/user1/test.sh
test.sh
[user1@study ~]$
有钱任性,请我吃包辣条
0%