2013-07-02 76 views
2

我正在處理一個文件處理項目,並試圖在PuTTY中運行一個名爲runProcessing.sh的shell腳本。服務器使用ksh。我的主管告訴我在執行腳本時使用./ runProcessing.sh <param1> <param2>,但是無論何時使用./它都表示cannot executefile not found。每當我輸入runProcessing.sh時,它都會返回空指針異常,我一直在努力繼續我的任務。使用./點斜槓運行shell腳本

我知道什麼時候運行腳本,但我不知道爲什麼它不工作,當我試圖運行我的腳本。任何提示或建議?我是Linux/UNIX的新手。

這裏是我的腳本:

#!/bin/ksh 
# 
# Script to download processing files from the appropriate target 
# 
# $Id: runProcessing.sh 604 2013-01-14 21:56:35Z alex_rempel $ 
# 

DIR=`dirname $0` 
. $DIR/setEnvironment.sh 
java $LDAPRUNMODE $JAVAOPT com.webproject.db.processing.FPJob --logdir $CISLOGDIR --file [2] $* 
RET=$? 

if [ $RET -gt 0 ] 
then 
    echo 
    echo 
    echo "------ runProcessing.sh Failed ------" 
    echo 
    echo 
    exit $RET 
+2

'。/ something'(指定當前目錄作爲找到某物的地方)和'。 (在當前shell中運行的東西而不是子進程)都是有意義的。 './ something'不是有效的用法。 –

+0

...順便說一下,你的腳本是無效的,因爲它有一個'if'沒有'fi'。你還需要引用你的擴展,而不應該使用'$?' - 這裏沒有意義。 '如果! java ...;然後 ...; fi'足夠了,沒有理由存儲'$ RET'。另外,對於環境變量和內置變量以外的任何內容使用全大寫字母都是不好的形式。 (依賴字符串分割讓人們通過參數列表是特別糟糕的形式,但它在啓動Java應用程序的腳本中幾乎無處不在......幾乎所有這些都由對shell沒有絲毫線索的人編寫)。 –

+0

在我的防守中,我模仿了我的腳本,在我公司構建過程中的類似腳本之後進行了類似的腳本處理,因此請原諒我所做的任何形式不當的事情。 – superdiazepam

回答

2

的空指針異常是從Java程序來,所以他們的意思是過程,事實上,啓動。作爲一項規則,它們通常不會指出您的shell腳本或其調用的問題。

. something # this reads the file `something`, running each line as a command 
      # in your current shell. (Actual behavior is a bit more sophisticated 
      # than that, but it's close enough). 

./something # this tries to run the file `something` in the current directory as 
      # an executable. It doesn't need to be a shell script -- it can be 
      # any kind of executable, and if it has a shebang line, that will be 
      # honored to determine the interpreter or shell to use. 

./ something # <- this is simply invalid. 

這就是說,你可以記錄什麼命令你的腳本由啓動它,像這樣運行:

ksh -x ./something 

這將顯示你的腳本運行的命令。如果錯誤是由腳本錯誤地啓動JVM導致的,那麼您可以確定期望和實際調用的不同之處。

+0

這幫助我找出腳本中是否有任何錯誤,結果除了在if語句結尾處丟失fi之外,沒有問題(足夠)。我現在的問題大部分都是通過了,我沒有在執行時向腳本傳遞適當的參數。謝謝! – superdiazepam

0

由於您在ksh環境中運行,因此您有另一個使用./運算符的選項。當您在Unix/Linux操作系統文件

ksh yourScript

,它不是:

而不是使你的腳本一個可執行的,你可以通過它作爲一個參數的ksh,像這樣執行它自動給予執行權限。因此,用戶也可使用chmod修改腳本的權限:

chmod +x yourScript

然後,您應該能夠執行腳本。