我有一个批处理文件 (.command),我双击它来执行工作。它依赖于同一文件夹中的文件,但如果我双击 .command 文件,它就会启动并假定当前位置是 /~
如何在脚本本身中查找/指定 .command 文件的位置,以便我可以参考相关资产?
答案1
如果您使用的是 bash(即脚本以 开头#!/bin/bash
),则可以使用 $BASH_SOURCE 获取脚本的文件名。从中,您可以获取其所在的目录:
mydir="$(dirname "$BASH_SOURCE")"
...然后使用它来查找与脚本相关的文件,例如cp "$mydir/fileInTheSameFolder" /tmp
(并且请始终在其周围使用双引号,就像我在这里所做的那样)。
请注意,这可能是一个相对路径;例如,如果脚本是从带有 的交互式 shell 运行的./scriptname.command
,它只会显示为“。”。除非脚本 cd 在其他地方,否则这应该不是问题,但如果您需要完整路径,您可以改用这个:
mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
echo "Error getting script directory" >&2
exit 1
}
或者,可以直接cd
在脚本的开头进入脚本的目录:
cd "$(dirname "$BASH_SOURCE")" || {
echo "Error getting script directory" >&2
exit 1
}