The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Shell и конвеер"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Shell и конвеер"  –1 +/
Сообщение от mrRadio (ok) on 11-Сен-12, 19:19 
Подскажите пожалуйста, нужно парсить вывод утилиты smbclient -gNL $ip, находить в выводе сервер samb`ы и его шары, но приходится сначала сливать вывод smbclient в tmp файл (так-как если испоьзовать конвеер переменные за циклом не будут сохраняться из-за subshell`a), чтобы его потом построчно разобрать в теле цикла и передавать результаты в переменные для дальнейших действий в функцию, вопрос заключается в том можно ли убрать tmp файл, используя каким нибудь образом конвеер, так-как ip много, нехочется делать лишнюю нагрузку на файловую систему, да и некрасиво это как мне кажется!?
p.s. пишу на shell, a не на bash, поэтому перенаправление в стиле "done < <(чего-то там)" не работает.
    while read line
    do
       object=`echo $line|awk -F"|" '{print $1}'`
       case "$object" in
          Disk)
                tmp=`echo $line|awk -F"|" '{print $2}'`
                dsk="$tmp $dsk"
                ;;
          IPC)
                ipc=`echo $line|awk '{print $3}'|tr -d "()"`
                ;;
          Server)
                echo $line|grep -q $ipc
                if [ $? -eq 0 ]
                then
                   srv=`echo $line|awk -F"|" '{print $2}'`
                fi
                ;;
       esac
    done < $ip.smb
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Shell и конвеер"  +/
Сообщение от vle (ok) on 11-Сен-12, 20:26 
0 cheusov>printf 'Всё\nработает\n' | { while read l; do ret="$ret $l"; done; echo $ret; }
Всё работает
0 0 cheusov>
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Shell и конвеер"  +/
Сообщение от mrRadio (ok) on 11-Сен-12, 23:52 
> 0 cheusov>printf 'Всё\nработает\n' | { while read l; do ret="$ret $l"; done;
> echo $ret; }
> Всё работает
> 0 0 cheusov>

Вопрос в том что если поместить то что вы написали в скрипт, то вне тела цикла while, переменная $ret будет пустой, мне же нужно чтобы переменная была доступна вне цикла, но это невозможно из-за конвеера
поробуйте запустить такой вариант и поймете о чем я говорю:

#!/bin/sh
printf 'Всё\nработает\n' | { while read l; do ret="$ret $l"; done; echo $ret; }
echo $ret

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Shell и конвеер"  +/
Сообщение от vle (ok) on 12-Сен-12, 00:39 
> #!/bin/sh
> printf 'Всё\nработает\n' | { while read l; do ret="$ret $l"; done; echo
> $ret; }
> echo $ret

Вопрос задать, конечно, можно, но надо же немного думать и над ответом.
Фигурные скобки там, где я их поставил, для чего стоят?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Shell и конвеер"  +/
Сообщение от mrRadio (ok) on 12-Сен-12, 01:22 
Спасибо разобрался, совсем забыл про блок!
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру