2013-06-24 51 views
0

我有一個腳本「postprocessing.sh」。該腳本用於後期處理熱力學仿真程序包的數據輸出,由父程序「npo」調用。Bash腳本從命令行成功運行,但不能在程序調用時運行

下面的代碼用於查找數據文件「MELC.PTF」中的數據向量「CFVALU_10000202」,將數據向量寫入文件「DATA1」,執行一些簡單的後處理,最後寫入結果爲「ext.goal1」。

爲此,許多使用的函數(MREAD,寫入g0.s0,基本上寫入aptplot1.gr的所有內容)都是安裝在文件樹不同部分中的繪圖工具的一部分。調用aptbatch.sh作爲輸入參數時,我們調用這個繪圖工具。 aptbatch.sh的路徑保存在「.bashrc」文件的路徑變量中。

通過鍵入「./postprocessing.sh」或「bash後處理」從bash執行下面的腳本時,它按照預期的方式執行,正好爲。文件DATA1,aptplot1.gr和ext.goal1在當前工作目錄中生成,並具有正確的內容。

當運行「npo」程序時,它調用「postprocessing.sh」,aptplot1.gr被寫入文件,但不會產生「DATA1」和「ext.goal1」。當試圖調用「aptbatch.sh」時程序停止。嘗試通過實驗在不使用「aptbatch.sh」的情況下運行「postprocessing.sh」,只需將一組隨機變量寫入文件即可正常工作,所以問題不在於調用後處理腳本。

根據npo的作者,程序應該發出一個帶有腳本名稱的系統命令,調用命令shell。

我試圖尋找涉及可執行文件的權限,並將chmod + x應用於任何事物,但沒有任何骰子。任何人都可以想到可能導致此問題的系統變量或權限?

#! /bin/sh 
cd ~/Melcor/NordicBWR/MinGoalFct/NordicBWR_05_08 

# clean up 
rm -f aptplot1* ext.goal1 DATA1* 

# write read out commands for data vector to file 
echo " MELCOR 0 PTF \"MELC.PTF\"" > aptplot1.gr 
echo " MREAD 0 \"CFVALU_10000202\" DONE" >> aptplot1.gr 
echo " write g0.s0 FILE \"./DATA1\"" >> aptplot1.gr 
# execute file 
aptbatch.sh -batch aptplot1.gr -nosafe -hardcopy 

# postprocessing of max. data value 
awk 'BEGIN {max = 0} {if ($2>max) max=$2} {GF = max-10000} {if (GF<0) GF=10000-max} END {printf("%6.5f\n", GF) } ' DATA1 > "ext.goal1" 

摘要:

腳本運行命令行罰款,腳本在aptbatch.sh當程序調用(但即使在這種情況下工作正常,沒有aptbatch.sh調用)檔。 aptbatch.sh的路徑位於.bashrc中,使用運行失敗期間生成的aptplot1.gr運行「aptbatch.sh -batch aptplot1.gr -nosafe -hardcopy」時,它工作正常。

想法?

+2

它是在同一目錄下運行?(可能是一個非問題退避三舍,第一行是一個CD)。PATH會事宜因爲它必須在某個地方找到aptbatch.sh – John3136

回答

0

繼@ @ John3136的建議後,嘗試將完整路徑設置爲aptbatch.sh,例如, /home/scripts/aptbatch.sh,而不只是名稱。如果它不在任何shell執行腳本的$PATH中,它將不會被找到。

+0

那麼,對於我在週末的一半時間裏浪費的東西,這很簡單,謝謝你們兩位,爲了將來的參考,我可以查找任何環境變量,它會告訴我哪個shell是用過的? – HobbsTunaSandwich

0

on un * x(與例如w32相反),當前路徑通常是而不是搜索程序。 只搜索PATH變量中的那些路徑。

首先,嘗試爲腳本提供搜索路徑。它不需要是絕對的,相對的就會很好。如果你的腳本是在其他地方下面將運行在當前目錄的腳本(如./表示)

./aptbatch.sh -batch aptplot1.gr -nosafe -hardcopy 

,那麼它可能是你的PATH變量是一個互動的外殼,當不同運行作爲script.ö

嘗試運行

echo $PATH 
都在你的腳本,並在CMDLINE

,看他們是否各色是NT。 (大概做echo $PATH >> /tmp/debug.txt在腳本中,這樣你就可以執行該腳本後,檢查文件/tmp/debug.txt

相關問題