gpt4 book ai didi

java - 我将如何使用 NSTask 运行 .sh 文件并获取其输出?

转载 作者:行者123 更新时间:2023-11-29 04:01:07 26 4
gpt4 key购买 nike

我需要运行一个 .sh 文件并获取其输出。我还需要查看文件的设置。

.sh 文件只是通过终端运行一个 java 应用程序。

有什么想法吗?我真的坚持这个......

以利亚

server.sh 文件:

echo Starting Jarvis Program D.
ALICE_HOME=.
SERVLET_LIB=lib/servlet.jar
ALICE_LIB=lib/aliceserver.jar
JS_LIB=lib/js.jar

# Set SQL_LIB to the location of your database driver.
SQL_LIB=lib/mysql_comp.jar

# These are for Jetty; you will want to change these if you are using a different http server.
HTTP_SERVER_LIBS=lib/org.mortbay.jetty.jar

PROGRAMD_CLASSPATH=$SERVLET_LIB:$ALICE_LIB:$JS_LIB:$SQL_LIB:$HTTP_SERVER_LIBS
java -classpath $PROGRAMD_CLASSPATH -Xms64m -Xmx128m org.alicebot.server.net.AliceServer $1

我当前的代码:

NSTask *server = [NSTask new];
[server setLaunchPath:@"/bin/sh"];
[server setArguments:[NSArray arrayWithObject:@"/applications/jarvis/brain/server.sh"]];

NSPipe *outputPipe = [NSPipe pipe];
[server setStandardInput:[NSPipe pipe]];
[server setStandardOutput:outputPipe];
[server launch];


NSMutableString *outputString = [NSMutableString string];
while ([outputString rangeOfString:@"Jarvis>"].location == NSNotFound) {
[outputString appendString:[[[NSString alloc] initWithData:[[outputPipe fileHandleForReading] readDataToEndOfFile] encoding:NSUTF8StringEncoding] autorelease]];
NSRunAlertPanel(@"", outputString, @"", @"", @"");

}

NSRunAlertPanel 仅用于检查输出。现在我的代码卡住了,甚至没有进入警报面板。

最佳答案

请参阅 this question 的答案.

有几件事应该在你的脚本中修复:

  • 脚本应该以shebang。还要确保脚本设置了可执行位。
  • 因为环境变量是相对于shell脚本目录设置的,所以需要确保脚本目录是当前目录。
  • 您需要导出应该对 Java 进程可见的环境变量。
  • 在最后一行中,您可以使用 exec 将 shell 进程替换为运行 Jetty 的 Java 可执行文件。

这是您的脚本的修订版:

#!/bin/sh
echo Starting Jarvis Program D.
cd "`dirname \"$0\"`"
export ALICE_HOME=.
export SERVLET_LIB=lib/servlet.jar
export ALICE_LIB=lib/aliceserver.jar
export JS_LIB=lib/js.jar

# Set SQL_LIB to the location of your database driver.
export SQL_LIB=lib/mysql_comp.jar

# These are for Jetty; you will want to change these if you are using a different http server.
export HTTP_SERVER_LIBS=lib/org.mortbay.jetty.jar

export PROGRAMD_CLASSPATH=$SERVLET_LIB:$ALICE_LIB:$JS_LIB:$SQL_LIB:$HTTP_SERVER_LIBS
exec java -classpath $PROGRAMD_CLASSPATH -Xms64m -Xmx128m org.alicebot.server.net.AliceServer $1

使用多个参数调用 Objective-C 中的 shell 脚本:

NSTask *server = [NSTask new];
[server setLaunchPath:@"/bin/sh"];
[server setArguments:[NSArray arrayWithObjects:@"/applications/jarvis/brain/server.sh", @"argument", nil]];
...

关于java - 我将如何使用 NSTask 运行 .sh 文件并获取其输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com