双击Mac上的shell脚本

Sec*_*ech 3 macos shell

我有一个运行jar文件的小脚本:

#!/bin/bash

prefix="foo";
name=`ls ${prefix}*.jar`;
echo $name;
java -jar $name prop1.properties prop2.properties
Run Code Online (Sandbox Code Playgroud)

当我使用./myscript.sh在终端中运行它时,它工作正常并且jar文件执行,但是当我在myscript.command中重命名并双击它时,我有这个错误:

ls: foo*.jar : No such file or directory
Run Code Online (Sandbox Code Playgroud)

我看到显然.command文件在根目录下打开一个终端,所以我尝试使用它找到包含myscript.command的目录:

dir = 'find <dir> -maxdepth 1 -type d -name '*myDirContainingJar*' -print -quit'
cd $dir
Run Code Online (Sandbox Code Playgroud)

但是dir只是空白,任何想法???

mkl*_*nt0 5

在macOS上从Finder打开shell脚本(无论是扩展.command还是无扩展可执行shell脚本)使当前用户的主目录成为当前目录(从macOS 10.12开始).

明确地改变其中的目录脚本本身所在bash脚本,请使用:

cd -- "$(dirname -- "$BASH_SOURCE")"
Run Code Online (Sandbox Code Playgroud)

在这种调用场景,下面符合POSIX标准的变化,它使用$0代替$BASH_SOURCE,将工作太: cd -- "$(dirname -- "$0")"

注意:

  • 通常,如果您的脚本是通过符号链接调用的,并且您想要更改为目标的目录(实际脚本文件的目录而不是符号链接所在的目录),则需要做更多的工作 - 请参阅我的回答.

  • 但是,从Finder打开脚本时,此问题不适用,因为Finder本身会将符号链接解析为其(终极)目标,然后直接调用目标.