在脚本B中运行脚本A,然后退出脚本B而不退出脚本A.

时间:2016-04-09 15:54:07

标签: bash loops run-script

我正在为我编写的脚本编写测试,并且像最简单的tr命令一样工作。我对测试的想法是,我会并行执​​行tr命令和我的脚本,将输出保存到变量并比较变量。首先,如何阻止脚本运行forver?我附上了测试和我的代码的代码。其次,如何将我的脚本和tr的输出保存到变量?我已经尝试过var = $(函数),但它不起作用。有没有办法并行调用它们?例如。我将开始测试,然后写'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

1 个答案:

答案 0 :(得分: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来检查两个文件的差异。