【发布时间】:2015-01-18 16:35:01
【问题描述】:
我正在努力解决一个小问题,我以前从未编写过 bash 脚本,对于知道如何正确完成它的人来说,这可能是一件小事。
我有以下文件夹结构(无法更改):
MyApp.app
|_Contents
|_Java
|_MyApp.jar
|_MacOS
|_launch.sh
launch.sh 脚本应该启动 MyApp.jar 可执行文件,目前如下所示:
#!/bin/bash
SCRIPT_DIR=$(cd "$(dirname "$0")/../Java"; pwd)
exec "$SCRIPT_DIR/jre/bin/java" -Xms256m -XX:PermSize=64m -jar "MyApp.jar"
启动 launch.sh 脚本时,第二行应该将当前工作目录从 MyApp.app/Contents/MacOS 更改为 MyApp.app/Contents/Java为了随后调用 java -jar MyApp.jar(第 3 行),并将其正确的根目录作为工作目录...
但是一旦 MyApp.jar 启动,我会打印出我的 Java 应用程序中的当前工作目录:
System.out.println(System.getProperty("user.dir"));
...它打印出launch.sh脚本的目录,即MyApp.app/Contents/MacOS而不是MyApp.app/Contents/Java .
任何如何正确更改 bash 脚本中的目录的想法都非常感谢:) ... ?!
【问题讨论】:
-
您的
cd命令位于子shell 中,因此它只影响该子shell。如果要更改主 shell 的工作目录,则需要直接在脚本中运行它。 -
您好安德鲁,感谢您的回复。这怎么能在脚本中完成?很抱歉,但在编写脚本方面我绝对是个菜鸟……
-
使用
cd,但在脚本的“顶层”。您正在一个新的范围内执行 cd。