我编写了一个在目录中找到的 bash 脚本:
/home/harmelodic/.Jetbrains/CLion.sh
执行以下操作:
#!/bin/sh
./clion*/bin/clion.sh
这是为了运行clion.sh
位于以下位置的脚本:
/home/matthew/.Jetbrains/clion-2016.2.3/bin/clion.sh
如果我打开一个终端/home/harmelodic/.Jetbrains/
并执行:
$ ./CLion.sh
它成功运行并打开 CLion IDE。
但是,如果我使用应用程序查找器中的启动器执行Command
脚本(如下所示),CLion IDE 将无法打开。
我完全不知所措。我以为Command
输入会很好地运行脚本,但事实并非如此。
我已确保脚本是可执行的,并且它通过终端运行,但它拒绝通过应用程序查找器中的启动器运行。
为什么?我该如何解决这个问题?
答案1
嗯,我们遇到了 PEBCAK 错误...
我错误地认为,如果我运行该脚本,脚本会自动知道自己在哪里,并使用其当前位置作为相对路径。
事实并非如此。脚本将把用户运行脚本的任何位置视为引用相对路径时要使用的路径。
这意味着如果我去/home/harmelodic/
跑:
$ ./.Jetbrains/CLion.sh
该脚本将会失败,因为它会寻找/clion*/bin/clion.sh
:
/home/harmelodic/
代替
/home/harmelodic/.Jetbrains/
解决方案是获取脚本的当前目录,然后使用当前目录结合相对路径执行命令以模拟相对路径,同时实际使用绝对路径:
#!/bin/sh
CURRENT_DIR=`dirname $0`
$CURRENT_DIR/clion*/bin/clion.sh
它可以在任何目录中运行,这意味着它可以在应用程序查找器的启动器中运行。