如何在 Mac OS X 中指定批处理 (.command) 文件的当前位置

如何在 Mac OS X 中指定批处理 (.command) 文件的当前位置

我有一个批处理文件 (.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
}

相关内容