我正在使用sh将一些Windows批处理文件转换为Unix脚本.我有问题,因为某些行为取决于批处理文件中可用的%~dp0宏.
有没有相当于这个?有没有办法获得执行脚本所在的目录?
问题(对你而言)$0
是它被设置为用于调用脚本的任何命令行,而不是脚本本身的位置.这可能使得很难获得包含脚本的目录的完整路径,这是您%~dp0
在Windows批处理文件中获得的.
例如,请考虑以下脚本dollar.sh
:
#!/bin/bash echo $0
如果您运行它,您将获得以下输出:
# ./dollar.sh ./dollar.sh # /tmp/dollar.sh /tmp/dollar.sh
因此,要获取脚本的完全限定目录名,请执行以下操作:
cd `dirname $0` SCRIPTDIR=`pwd` cd -
其工作原理如下:
cd
使用命令行中的相对路径或绝对路径到脚本目录.
获取此目录的绝对路径并将其存储在其中SCRIPTDIR
.
使用" cd -
" 返回上一个工作目录.