我需要运行一个脚本来访问文件所在路径中的文件。
例如:我有 脚本/home/me/folder/script.sh
,该脚本将访问文件/home/me/folder/myfile
。由于该文件与脚本位于同一路径中,因此我只使用名称myfile
,而不是完整路径。
但如果我从 运行它/tmp/
,比如:
/tmp$ /home/me/folder/script.sh
它给了我:
myfile: No such file or directory
那么,我怎样才能在脚本中说该文件与脚本本身位于同一路径中呢?
答案1
您不可能在所有情况下都知道,但通常(并非总是)当您通过路径运行脚本而不是让 shell 搜索时$PATH
,脚本的路径将位于$0
.然后您可以使用dirname "$0"
或${0%/*}
来获取路径。
答案2
怎么样$(dirname "$0")/myfile
?
答案3
我通常会在脚本的开头做这样的事情:
SCRIPTDIR=$(dirname "$0")
或者,要获取脚本目录的完整路径名(而不是相对路径名):
SCRIPTDIR=$(cd $(dirname "$0") && pwd)
然后${SCRIPTDIR}
在需要的地方引用即可。