繁体   English   中英

如何在Mac OS X上的bash脚本中更改当前工作目录?

[英]How to change current working directory within a bash script on Mac OS X?

我正在努力解决一个小问题,我以前从未写过一个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命令(更改目录)。 但是, 如果必须更改目录,更优化的解决方案可能是使用pushdpopd命令来构建堆栈。

在这种情况下,您可以硬编码脚本在执行期间必须导航到的文件路径:

_java=/Applications/MyApp.app/_Contents/_Java;

然后使用pushd和popd(将目录推入堆栈,从堆栈弹出目录):

# Currently in /Applications/MyApp.app/_Contents/_MacOS/
pushd $_java;

# Do what you have to do in the _Java working directory (./ = current working directory)
exec "./jre/bin/java" -Xms256m -XX:PermSize=64m -jar "MyApp.jar";

# Print the working directory and return to bottom of stack
pwd; popd;

没有什么可以反对cd的使用,但pushdpopd回答了这个问题,并且在某些情况下比cd更灵活,特别是在执行期间你必须多次遍历文件层次结构时。 更多信息man pushdman popd ,google或相关文章,例如: https//unix.stackexchange.com/questions/77077/how-do-i-use-pushd-and-popd-commands

除此之外,即使是日常使用,CD也很棒,但在我的情况下,我总是四处走动,很高兴能够进入我的/ Library / LaunchDaemons /并简单地 pushd ~/Documents/Scripts/ ; vim bashp0rn.sh ; popd ; 然后返回/ Library / LaunchDaemons /加载和启动( launchctl )。

现在 ,说到这一点,您无需更改应用程序工作目录即可启动应用程序:

...为了随后调用java -jar MyApp.jar(第3行),其正确的根目录作为工作目录...

如果这是你的唯一要求&&如果这是你的要求,因为在这种情况下你试图通过将pwd的输出分配给$SCRIPT_DIR来完成路径,那么我建议硬编码完整路径并使用eval命令代替:

#!/bin/bash

app='/Applications/MyApp.app/_Contents/_Java/jre/bin/java -Xms256m -XX:PermSize=64m -jar "MyApp.jar"';

现在,从文件层次结构的任何位置,您都可以评估变量:

eval $app;

尝试这样做:

cd "$(dirname "$0")/../Java"
SCRIPT_DIR=$(pwd)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM