如何从另一个路径运行脚本并知道脚本的路径?

如何从另一个路径运行脚本并知道脚本的路径?

我需要运行一个脚本来访问文件所在路径中的文件。

例如:我有 脚本/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}在需要的地方引用即可。

相关内容