2010-08-21 387 views
1

这里是一个shell脚本:

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 

在最后一行:什么是$ 1的意思?

+0

我投票关闭这个问题,直到你提供了一些真实的,可操作的信息和真实的描述你的问题是什么。你误解了什么理由对于剧本而言意味着什么是红鲱鱼。 – duffymo 2010-08-22 01:09:45

+0

好吧,我明白了。我现在正在使用我的iPhone,因此我将在今晚晚些时候编辑问题。 – objectiveccoder001 2010-08-22 01:27:23

+0

您可以关闭它,我现在不能删除它... – objectiveccoder001 2010-08-22 13:38:04

回答

8

这不是Java,它是shell脚本语言。 $1是在命令行上提供的第一个参数。它告诉脚本将您提供的第一个命令行参数传递给java.exe。它反过来成为您对main()的调用中的第一个参数。

如果你的主这个样子了,你提供的价值是“富”,输出将是“富”:

public static void main(String [] args) 
{ 
    for (String arg : args) 
    { 
     System.out.println(arg); 
    } 
} 
+0

那么第一个命令行参数会是什么? – objectiveccoder001 2010-08-21 22:22:50

+0

如果脚本的名称是jarvis.sh,并且通过键入“jarvis.sh foo”在命令shell中启动它,那么第一个参数是“foo”。 – duffymo 2010-08-21 23:14:45

+0

看看我对duffymo的评论。我迷路了...... – objectiveccoder001 2010-08-21 23:21:17

2

$1壳scriping手段“的说法1号传递给这个shell脚本”。

举例来说,如果你有一个名为“foo.sh” shell脚本,其内容如下:

#!/bin/sh 
echo "$1" 

和你./foo.sh hello world叫,然后hello是传递给脚本的第一个参数,并且将执行echo "hello"命令并将hello打印到屏幕上。

+0

会$ 1在我的shell脚本? – objectiveccoder001 2010-08-21 22:51:12

+0

如果您没有传递命令行参数,那么它是一个空白字符串。 – duffymo 2010-08-21 23:15:05

+0

嗯,我通过NSTask运行它,它似乎冻结我的代码,除非我提出一个参数。我把“H”。它错了:“找不到”H“!”我很困惑... – objectiveccoder001 2010-08-21 23:20:25

0

只是为了好奇,下面是shell脚本称为server.sh整个代码环境:

http://sourceforge.net/projects/charliebot/

一些更多的信息可以在这里找到:

# http://www.alicebot.org/resources/programd/readme.html 
# http://www.noendpress.com/caleb/ALICE101_MacOSX/ 
+0

是的!这是我试图运行。 – objectiveccoder001 2010-08-22 13:14:59