П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 175057 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 72048 раз(а).

Учебник HTML.
Просмотров 72106 раз(а).

Руководство по PHP5.
Просмотров 42727 раз(а).

Хостинг через призму DNS.
Просмотров 49221 раз(а).

Подборка текстов стандартных документов.
Просмотров 43145 раз(а).

Учебник PHP - Самоучитель
Просмотров 49487 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 49749 раз(а).

Внешние атаки...
Просмотров 40275 раз(а).

Учебник PHP.
Просмотров 35309 раз(а).

SSI в примерах.
Просмотров 26581 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 14: Управление процессами.
14.2 Использование обратных кавычек

Еще один способ запуска процесса — заключить командную строку для /bin/sh в обратные кавычки. Как и в shell, этот механизм запускает команду и ожидает ее завершення, получая данные со стандартного вывода по мере их поступления:

$now = "the time is now".'date'; # получает текст и дату

Значение переменной $now теперь представляет собой текст the time is now и результат выполнения команды date(l) (включая конечний символ новой строки):

the time is now Fri Aug 13 23:59:59 PDT 1996

Если взятая в обратные кавычки команда используется не в скалярном, а в списочном контексте, то возвращается список строкових значений, каждое из которых представляет собой строку (оканчивающуюся символом новой строки*) из результата выполнения команды. В примере с командой date у нас был бы всего один элемент, потому что она выдала всего одну строку текста. Результат работы команды who выглядит так:

merlyn tty42 Dec 7 19:41
fred ttylA Aug 31 07:02
barney ttylF Sep 1 09:22

Вот как можно получить этот результат в списочном контексте:

foreach $_ ('who') ( # один раз для каждой строки текста из who 
  <$who,$where,$when) = /(\S+)\s+(\S+)\s+(.*)/;
  print "$who on $where at $when\n";
}

* Или символом, которьш у вас занесен в переменную $/.

При каждом выполнении этого цикла используется одна строка выходных данных команды who, потому что взятая в обратные кавички команда интерпретируется в списочном контексте.

Стандартный ввод и стандартный вывод ошибок команды, взятой в обратные кавички, наследуются от Perl-процесса*. Это значит, что обычно стандартный вывод таких команд ви можете получить как значение строки, заключенной в обратные кавички. Одна из распространенных операций — обьединение стандартного вывода ошибок со стандартним выводом, чтобы команда в обратннх кавычках "подбирала" их оба. Для этого используется конструкция shell 2>&1:

die "rm spoke!" if 'rm fred 2>&1';

Здесь Perl-процесс завершается, если rm посылает какое-нибудь сообщение — либо на стандартный вывод, либо на стандартный вывод ошибок, потому что результат больше не будет пустой строкой (пустая строка соответствовала би значенню "ложь").

* На самом деле все не так просто. См. соответствующий ответ в разделе 8 сборника часто задаваемых вопросов по Perl ("Как перехватить stderr из внешней команды?"). Если у вас Perl версии 5.004, этот сборник распространяется как обычная man-страница — в данном случае perlfaq8( 1).

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru