2

私が書いたスクリプトのテストを書いていて、最も単純な tr コマンドのように動作します。私のテストのアイデアは、tr コマンドとスクリプトを並行して実行し、出力を変数に保存して変数を比較するというものでした。まず、スクリプトが永久に実行されないようにする方法は? テストとスクリプトの両方のコードを同封します。次に、スクリプトと tr の出力を変数に保存する方法を教えてください。var=$(function) を試しましたが、うまくいきません。そして、それらを並行して呼び出す方法はありますか? 例えば。テストを開始してから「abba」と書き、両方のスクリプトでそれを「ABBA」に変更したいと思います。

そして、それは良い考えですか?私はこれまで「正式な」テストを書いたことがありません。

テストコード:

#!/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
4

1 に答える 1

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て 2 つのファイルの違いを確認できます。

于 2016-04-09T17:04:46.660 に答える