2010-08-21 139 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