Bash Паралелни процеси в Netcat -c

Използвам netcat в bash скрипт като псевдосървър, за да стартирам допълнителни bash скриптове от въведени входове. Това беше нещо като приятен страничен проект, но изглежда, че съм се забил.

По същество скриптът и кодът работят перфектно, но резултатът не се показва, докато сървърът не завърши процеса; тъй като това може да бъде 40-часов процес, не е желателно клиентът да има екран за зареждане и без подкана през цялото време.

Казано по-просто, бих искал да заредя страница на базата на съдържанието до определена точка, игнорирайки резултата от всичко, което следва. Кодът, който имам досега, е следният:

#!/bin/bash
while [ $? -eq 0 ]; do
  nc -vlp 8080 -c'(
  r=read
  $r a b c
  z=$r
  while [ ${#z} -gt 2]; do
    $r z
  done
  f=`echo $b|sed "s/[^a-z0-9_.-]//gi"`
  o="HTTP/1.0 200 OK\r\n"
  c="Content"
  if [ -z "$f" ]; then
    f="index.html"
    echo "$o$c-Type: `file -ib $f`\n$c-Length: `stat  -c%s $f`"
    echo
    cat $f
  elif [ "$f"==Encrypt ]; then
    echo $o
    echo
    echo $(bash ~/webSupport.sh currentEncrypt "$b")
    bash ~/webSupport.sh pullVars "$b" &
  else
    echo -e "HTTP/1.0 404 Not Found\n\n404\n"
  fi
  )'
done

Търсих наоколо и не мога да намеря начин да го заобиколя, всяка помощ ще бъде оценена.


person Kiradien    schedule 11.07.2013    source източник
comment
Съжаляваме, но е трудно да се каже какви са входовете и изходите, можете ли да разширите това? Изглежда интересно, успех.   -  person shellter    schedule 11.07.2013
comment
Входящите данни идват от уеб браузър, като a е протоколът, b е пътят. Резултатите са основен HTML, скриптът, който извиква за извършване на криптиране, по същество казва Стартиране на шифроване... или Шифроване вече е в ход, моля изчакайте... от изходящо ехо. По същество извиква sleep 500000 в линията pullVars xD   -  person Kiradien    schedule 11.07.2013


Отговори (1)


Вероятно трябва да е достатъчно да пренасочите изходните потоци (към /dev/null или файл, ако трябва да го запазите)

bash ~/webSupport.sh pullVars "$b" >/dev/null 2>&1 &

или ги затворете:

bash ~/webSupport.sh pullVars "$b" >&- 2>&- &
person mata    schedule 11.07.2013
comment
Това направи чудеса; Преди предполагах, че ще е достатъчно да направя това в самия външен скрипт, но сега, като се замисля, има смисъл да трябва да се направи тук! Трябва да попитам обаче каква точно е целта на & в ›&1 - никога не съм виждал този символ да се използва по този начин. - person Kiradien; 11.07.2013
comment
m>&n означава: пренасочване на файловия дескриптор 'm' към мястото, където в момента сочи файловият дескриптор 'n', освен ако n е -, тогава това означава затваряне на m. така че >/dev/null 2>&1 означава пренасочване на stdout към /dev/null, след това пренасочване на stderr към мястото, където сочи stdout (което сега е /dev/null), така че това е просто по-кратко от >/dev/null 2>/dev/null. Ще намерите по-пълно обяснение тук - person mata; 11.07.2013