2016-04-09 241 views
1

我正在爲我編寫的腳本編寫測試,它的工作方式與最簡單的tr命令類似。我的測試想法是,我會並行運行tr命令和我的腳本,將輸出保存到變量並比較變量。首先,如何停止腳本運行forver?我附上測試​​和我的scipt代碼。其次,如何將我的腳本和tr的輸出保存到變量中?我試過var = $(function),但它不起作用。還有一種方法可以並行調用它們嗎?例如。我會開始測試,然後寫'abba',我希望這兩個腳本都能用pallalel將它改爲'ABBA'。在腳本B中運行腳本A,然後在不退出腳本的情況下退出腳本B

這是一個好主意嗎?我從未寫過'正式'測試。

測試代碼:

#!/bin/bash 
**tr_znakiScript="/home/wiktoria/skrypty/testy/tr_znaki.sh" 
    echo "this script is about to run another script" 
    a=ab 
    b=AB 
    echo "$a" 
    echo "$b" 

    . $tr_znakiScript "$a" "$b" 

    exit 1 

# x=2; 
#while [ $x -le 2 ]; do 
#echo "Napis pojawił się po raz: $x" 
#x=$[x + 1] 
#hash=$(. $tr_znakiScript "$a" "$b") 
#. $tr_znakiScript "$a" "$b" 
#echo $hash 
#done 
#echo $hash** 

tr_znaki.sh代碼

#!/bin/bash 
first_two="$1 $2" #zapisuje dwia pierwsze znaki do wspolnej zmiennej 
a="$1";b="$2" #rozdziela znaki 
split1=$(echo $a | fold -w 1) #rozdziela a na litery i wypisuje 
split2=$(echo $b | fold -w 1) #rozdziela a na litery i wypisuje 
arr1=($split1) #zapisanie stringu do tablicy 
arr2=($split2) #zapisanie stringu do tablicy 

shift #usuwa pierwszy argument 
shift #usuwa drugi argument 


size1=${#arr1[@]} #zapisanie rozmiaru arr1 do zmiennej 
size2=${#arr2[@]} #zapisanie rozmiaru arr2 do zmiennej 

# nieskończona pętla pozwalająca na ciągłe wpisywanie tekstu do translacji, przerywana standardowo ctrl + c 
while true 
do 
    read tekst #zmienna, do której wpisywany jest przez użytkownika tekst 
    mod=$tekst #zapisanie wpisanego tekstu do zmiennej 
    for ((i=0; i<${size1}; i++)); 
    do 
     mod=${mod//[${arr1[i]}]/${arr2[i]}} #nowa zmienna z zamianą którejś z wartości w arr na odpowiadającą wartość w arr2 
    done 
    echo $mod #wypisanie zmienionego tekstu 
    #sleep 1 #czeka sekundę 

done 
+0

由於您使用'.'命令,因此您在與A相同的解釋器中執行B的代碼。因此它們是相同的程序。 –

回答

2

嘗試nohup

實施例:

$(nohup ./your/script/here.sh > somefile.out 2> somefile.err < /dev/null &) 

nohup命令基本上允許在後臺運行的方法,但在此期間,則無法通過任何手段該程序進行交互(除了用於終止它)。 (詳見nohup文檔)

您可以檢查somefile.out您的輸出。

此外,對於終止您可以使用top(進程管理器)或kill -SIGTERM PID(這可以在您的腳本中使用:$(kill -SIGTERM PID))。 (PID是您的進程ID,也可以在頂部找到)。

爲了比較您的輸出,可以使用./your/script/A.sh > file.out,然後可以使用diff file.out somefile.out來檢查這兩個文件的差異。

+0

'nohup'不在後臺運行命令。 'nohup'允許你運行一個不受掛機影響的命令,輸出到非tty。這也是你在行尾添加'&'的原因,這會導致命令在後臺執行。 –

+0

那裏。修正了「允許你」 – ForceMagic