macos - Mac 问题上存在 Shell 脚本文件

标签 macos file shell

好的,我已经在 Linux Ubuntu 中编写了一个 .sh 文件,它运行良好。然而,在 Mac 上,它总是返回找不到文件,即使它在同一目录中。谁能帮我吗?

.sh 文件:

if [ ! -f file-3*.jar ]; then
echo "[INFO] jar could not be found."
exit
fi

只是想补充一下,这不是针对多个文件,而是针对重命名为多个结尾的文件。

最佳答案

在对@Paul R 的回答的评论中,您说“shell 脚本也与 jar 文件位于同一目录中。因此,默认情况下,他们可以在分配 SH 文件以使用终端打开后双击它。”我怀疑这就是问题所在——当您通过双击运行 shell 脚本时,它运行时将工作目录设置为用户的主目录,而不是脚本所在的目录。您可以通过将脚本 cd 放到它所在的目录来解决这个问题:

cd "$(dirname "$BASH_SOURCE")"

编辑:当然,$BASH_SOURCE 是其他 shell 中不可用的 bash 扩展。如果您的脚本不能指望在 bash 中运行,请改用它:
case "$0" in
    */*)
        cd "$(dirname "$0")" ;;
    *)
        me="$(which "$0")"
        if [ -n "$me" ]; then
            cd "$(dirname "$me")"
        else
            echo "Can't locate script directory" >&2
            exit 1
        fi ;;
esac

顺便说一句,构造 [ ! -f file-3*.jar ]让我很紧张,因为如果有不止一个匹配的文件,它会奇怪地失败。 (我知道,这不应该发生;但是无论如何都不应该发生的事情有任何令人讨厌的倾向。)我会用这个来代替:
matchfiles=(file-3*.jar)
if [ ! -f "${matchfiles[0]}" ]; then
    ...

同样,如果您不能指望 bash 扩展,这里有一个可以在任何 POSIX shell 中工作的替代方法:
if [ ! -f "$(echo file-3*.jar)" ]; then

请注意,如果有多个匹配项,这将失败(即表现得好像文件不存在一样)。

关于macos - Mac 问题上存在 Shell 脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936333/

相关文章:

macos - 是否可以从 Matlab 向 OSX 中的通知中心发送通知?

macos - AppleScript 编辑器记录不起作用

macos - 你如何在 OS X 中使用 Scheme?

shell - 如何将文本 append 到文件?

linux - shell 脚本 : appending directory path and filename

swift - 在 Swift 中获取 ForceFeedback 设备

c - 在执行之间保存信息?

ios - 当我在 xcode 中构建我的应用程序时,出现错误 :/bin/sh: bad interpreter: Operation not permitted

linux - 如何跟踪文件的创建和修改

java - 如何使用 Java Netbeans 读取项目文件夹之外的 txt 文件