Глава 1. Работа с командной строкой
25
место.ввода.и/или.вывода,.
не изменяя саму программу.
.Если.у.вас.есть.программа.
под.названием.
handywork
,.читающая.ввод.из.stdin.и.записывающая.результаты.
в.stdout,.вы.легко.можете.это.изменить:
handywork < data.in > results.out
Так,.
handywork
.запустится,.но.ее.ввод.будет.поступать.не.с.клавиатуры,.а.из.файла.
под.названием.
data.in
.(если.такой.файл.существует.и.в.нем.есть.информация.
в.нужном.формате)..А.результат.будет.отправляться.не.на.экран,.а.в.файл.под.
названием
results.out
.(если.его.не.существует,.он.будет.создан,.а.если.существу-
ет.—.переписан)..Эта.техника.называется.
перенаправлением
,.потому.что.мы.пере-
направляем.ввод.из.другого.места.и.вывод.не.на.экран.
А.что.делать.с.stderr?.Синтаксис.в.данном.случае.схож..При.перенаправлении.
данных,.выводимых.программой,.нужно.различать.stdout.и.stderr,.и.мы.создаем.
это.различие.с.помощью.номеров.файловых.дескрипторов..Stdin.—.это.файловый.
дескриптор.0,.stdout.—.файловый.дескриптор.1,.а.stderr.—.файловый.дескриптор.2..
Таким.образом,.мы.можем.перенаправить.сообщения.об.ошибках:
handywork 2> err.msgs
Здесь.мы.перенаправляем.только.stderr,.и.любое.сообщение.об.ошибке.будет.от-
правлено.в.файл,.который.мы.назвали.
err.msgs
.
Разумеется,.мы.можем.выполнить.все.три.действия.одной.строкой.кода:
handywork < data.in > results.out 2> err.msgs
Иногда.нужно,.чтобы.сообщения.об.ошибках.были.объединены.с.нормальными.
результатами.(как.это.происходит.по.умолчанию,.когда.и.то.и.другое.выводится.
на.экране)..Это.можно.сделать.так:
handywork < data.in > results.out 2>&1
Данное.действие.заставляет.отправлять.stderr.(
2
).в.то.же.место,.что.и.файловый.
дескриптор.1.(
&1
)..Отметьте,.что,.если.не.будет.значка.амперсанда.(
&
),.сообще-
ния.об.ошибках.будут.просто.отправляться.в.файл.с.названием.
1
..Такое.соче-
тание.stdout.и.stderr.так.распространено,.что.существует.удобная.сокращенная.
нотация:
handywork < data.in &> results.out
Если.вы.хотите.отсеять.стандартный.вывод,.можете.перенаправить.его.в.специ-
альный.файл.под.названием.
/dev/null
:
handywork < data.in > /dev/null
26
Часть I • Основы
Чтобы.видеть.результаты.в.командной.строке.и.одновременно.перенаправ-
лять.их.в.файл,.используйте.команду.
tee
..Следующий.пример.выводит.резуль-
таты.выполнения.команды.
handywork
.на.экран.и.в.то.же.время.сохраняет.их.
в.файл.
results.out
:
handywork < data.in | tee results.out
Используйте.опцию.
-a
.команды.
t
ee
,.чтобы.добавлять.результаты.в.файл,.а.не.
переписывать.его.заново..Символ.
|
.известен.как.
«пайп»
(pipe)..Указав.его,.можно.
использовать.результаты.одной.команды.в.качестве.исходных.данных.для.другой..
В.данном.примере.результаты.выполнения.
handywork
.передаются.команде.
tee
.для.
дальнейшей.обработки.
При.перенаправлении.результата.с.использованием.символа.
>
.файл.будет.создан.
или.обрезан.(то.есть.из.файла.будет.удалено.содержимое)..Если.вы.хотите.заранее.
сохранить.имеющееся.содержимое.данного.файла,.вам.следует.его.
дополнить
,.ис-
пользуя.символ.
>>
,.как.показано.ниже:
handywork < data.in >> results.out
Таким.образом,.выполняется.
handywork
,.а.затем.любой.результат.из.stdout.до-
бавляется.в.файл.
results.out
,.а.не.перезаписывается.поверх.существующего.
содержимого.
Следующая.строка:
handywork < data.in &>> results.out
позволяет.выполнить.
handywork
,.а.затем.добавить.и.stdout,.и.stderr.в.файл.
results.out
,.
не.перезаписывая.поверх.существующего.содержимого.
Выполнение команд в фоновом режиме
На.протяжении.этой.книги.мы.выйдем.за.рамки.однострочных.команд.и.начнем.
создавать.сложные.сценарии..Некоторые.из.них.могут.выполняться.в.течение.
довольно.длительного.времени,.и.вы,.возможно,.не.захотите.долго.ждать..Вместо.
этого.вы.можете.запустить.любую.команду.или.сценарий.в.фоновом.режиме,.ис-
пользуя.оператор.
&
..Скрипт.будет.выполняться.дальше,.но.вы.сможете.продолжать.
использовать.оболочку,.давая.другие.команды.и/или.выполняя.другие.сценарии..
Например,.чтобы.запустить.
ping
.в.фоновом.режиме.и.перенаправить.стандартный.
вывод.в.файл,.используйте.эту.команду:
ping 192.168.10.56 > ping.log &
Do'stlaringiz bilan baham: |