2013-07-11 3 views
1

Я использую netcat в сценарии bash как псевдосервер, чтобы запускать дополнительные скрипты bash с введенных входов. Это был какой-то приятный побочный проект, но я, похоже, застрял.Bash Параллельные процессы в Netcat -c

По существу, сценарий и код работают отлично, но вывод не отображается до тех пор, пока сервер не завершит процесс; поскольку это может быть 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 

Я искал вокруг и не может найти способ обойти его, любая помощь будет оценена.

+0

Извините, но это трудно скажите, что такое входы и выходы, можете ли вы расширить это? Выглядит интересно, удачи. – shellter

+0

Входы поступают из веб-браузера, причем протокол является протоколом, b - это путь. Выходы - это базовый HTML, сценарий, который он вызывает для шифрования, по существу говорит «Запуск шифрования ...» или «Шифрование уже выполняется, подождите ...» из исходящего эха. По сути, это вызов 'sleep 500000' в линии pullVars xD – Kiradien

ответ

1

Это должно быть достаточно, чтобы перенаправить выходные потоки (в /dev/null или файл, если вам нужно сохранить его)

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

или закрыть их:

bash ~/webSupport.sh pullVars "$b" >&- 2>&- & 
+0

Это сработало чудеса; Раньше я предполагал, что этого достаточно для внешнего скрипта, но теперь, когда я думаю об этом, здесь совершенно необходимо сделать это! Мне действительно нужно спросить, что именно является целью & in> & 1 - Я никогда не видел этот символ, используемый таким образом. – Kiradien

+0

'm> & n' означает: перенаправить filedescriptor' 'm'' туда, где filedescriptor' 'n'' является текущим указателем, execpt, если' n' является '-', то это означает' '' '' '' ''. поэтому '>/dev/null 2> & 1' означает перенаправление stdout на/dev/null, а затем перенаправление stderr на то, где stdout указывает (что/dev/null сейчас), так что это всего лишь сокращение для'>/dev/null 2>/DEV/null'. Вы найдете более полное объяснение [здесь] (http://www.gnu.org/software/bash/manual/bashref.html#Redirections) – mata

Смежные вопросы