dirname $0
在命令行下,单纯执行 $ cd `dirname $0`
是毫无意义的,因为dirname $0
会返回当前路径.
。dirname $0
命令写在shell脚本里才有作用,返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对路径。在/home/admin/test/下新建test.sh内容如下:
#!/bin/bash
cd `dirname $0`
echo `pwd`
然后返回到/home/admin/执行
sh test/test.sh
运行结果:
/home/admin/test
这样,就知道一些与当前脚本放在一起的文件相对路径,只要知道相对路径就可以根据这个目录来定位,而不用关心绝对路径。这样脚本的可移植性就提高了,扔到任何一台服务器都可以执行。
$(cd "$(dirname "$0")";pwd)
#!/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)
解析:
-
取当前运行脚本的所在路径:
$0
-
取当前脚本所在路径的父目录:
dirname "$0"
-
取返回的父目录的值:
$(dirname "$0")
-
cd到返回的父目录:
cd "$(dirname "$0")"
-
输出地址:
cd "$(dirname "$0")";pwd
-
取输出的地址,并赋值给BIN_FOLDER:
BIN_FOLDER = $(cd "$(dirname "$0")";pwd)