2013-04-04 66 views
1

我正在一個有時非常慢的linux服務器上工作。所以當我添加一些工作爲我運行時,我必須等待幾個小時才能運行一個簡單的計算。檢查文件是否存在,並等待sh腳本運行,直到找到文件

我在想,如果我能夠開始下一個分析,而是讓它等到前面分析的輸出是存在的。 (第二次分析所需要的第一個分析輸出)

我試圖讓除了和其他的選擇工作,但仍然沒有成功(發現除並在計算器上一個問題的其他選項): expect { 'output/analysis_file1.txt' }

任何想法/提示受到讚賞,並會幫助我分配。

我唯一希望的是讓第二代息等到最初的腳本的文本文件中給出。

4腳本:1。

#!/bin/bash 
#$ -cwd 
./script1.sh 

. ./script2.sh $repla 

. ./script3.sh $replac 

2:

repla='' 
for i in 'abcdefghijklmnopqrst' 
do 
    repla=`echo $i | sed 's/'abc'/'xyz'/g'` 
    #echo $repla 
done 

3:

replac='' 
for j in $1 
do 
    replac=`echo $j | sed 's/'xyz'/'san'/g'` 
    #echo $replac 
done 

4:

replace='' 
for h in $1 
do 
    replace=`echo $h | sed 's/'san'/'sander'/g'` 
    #echo $replace 
done 
+0

第一個腳本在文件完成時結束,還是繼續執行其他操作? – William

+0

@William何時結束文件是完整的 –

+1

然後,你可以把它們連在一起,在命令行上:'SCRIPT1時SCRIPT1完成&& script2' SCRIPT2然後將運行並返回成功(0)。如果您不相信script1的退出值表示成功或失敗,那麼只需使用'script1; script2',並希望script2在文件不存在時會做些優雅的事情。 – William

回答

1

您可以使用wait,如果你知道在後臺運行的進程的PID。等待也將返回它正在等待停止的進程的相同退出代碼。

firstProcess & # Running in background 
firstPid=$! 
otherProcess # Concurrent with firstProcess 
wait $firstPid # Wait firstProcess finish 
anotherProcess 
7

可以在下方芯使用具有一些修改

#!/bin/bash 
while [ ! -f FILE_NAME ] 
    do 
    sleep SOME_SECONDS 
    done 
echo "file found" 
1

代替執行多個腳本獨立,你應該創建一個master script runner這樣的:

#!/bin/bash 

# sanity checks & parse arguments 

./script1 
ret=$? 
# check for return value of script1 using $ret variable 

./script2 
ret=$? 
# check for return value of script2 using $ret variable 

./script3 
ret=$? 
# check for return value of script3 using $ret variable 

... 
# do cleanup and reporting 
+0

對於後期第二個問題感到抱歉,但是如何檢查最後一個腳本的值以運行下一個問題。類似於 './script 等待(腳本) 。/ script2' ./script1 –

+1

@SanderVanderZeeuw:您可以使用變量'$?'作爲最後腳本執行的狀態。 – anubhava

+0

對不起,我不明白它。你能再解釋一下嗎? –

相關問題