Вход/Регистрация
BASH. Справочное пособие
вернуться

Ткачев Вячеслав

Шрифт:

Пример 1 # дескриптор 1 стандартный вывод.

$ date >&1

Вт июн 11 22:05:51 MSK 2019

cmd >&– Закрыть стандартный вывод

$ date >&-

date: ошибка записи: Неправильный дескриптор файла.

cmd<&n Взять входные данные для указанной команды из файла с заданным дескриптором n.

$ cat >file1<&0

privet

$ cat file1

privet

cmdm<&n Входные данные из файла с дескриптором m

поступают из файла с дескриптором n.

$ cat >file1 2<&0

privet 4 # Набираем с клавиатуры

$ cat file1

privet 4

cmd<&– Закрыть стандартный ввод.

$ pwd<&-

/home/max1

$

cmd<&n Направить содержимое файла с заданным дескриптором n в стандартный ввод,получив сначала копию, а затем закрыв оригинал.

cmd>&n- Направить содержимое файла с заданным дескриптором n в стандартный вывод,получив сначала копию,а затем закрыв оригинал.

Пример Напишем следующий скрипт

$ cat f2.sh

#!/bin/sh

read str <&0

echo "$str" | festival –tts –language russian

Запускаем скрипт

$ sh f2.sh Набираем в терминале фразу

Привет друзья. Нажимаем Enter и слышим

«Привет друзья»

Пример 2

$ cat f5.txt

Hello my friend

$ read str <f5.txt |echo "$str" >&1-

Hello my friend

Использование команды exec с дескрипторами.

exec 0

Создадим под root myfile с двумя командами.

# cat >myfile

pwd; date

Выполнить команды из файла вместо стандартного ввода.

# exec 0<myfile

# pwd; date

/root

exec 1

cat myscript1.sh

#!/bin/sh

exec 1>outfile

0echo "This a test"

$ cat ./outfile

This is a test

exec 3

$ cat myscript3.sh

#!/bin/sh

exec 3> myfile

echo "Privet" >&3

cat ./myfile

$sh myscript.sh

Privet

Примечание возможно использование команды exec c дескрипторами 0-9.

2.10 Многократная переадресация ввода-вывода.

Направить стандартный вывод ошибок в заданный

файл cmd 2>file Пример 1

$ ls -l /root/ 2>ls_er; cat ls_er

ls: невозможно открыть каталог '/root/': Отказано в доступе.

Направить стандартный вывод ошибок и данных в

заданный файл.

cmd >file 2>&1 Пример 2

$ ls -l f1.txt; ls -l /root/ 2>&1 >ls1

–rw-rw-r– 1 max1 max1 6 мая 9 07:21 f1.txt

ls: невозможно открыть каталог '/root/': Отказано в доступе.

$ cat ls1

ls: невозможно открыть каталог '/root/': Отказано в доступе.

Присоединить стандартный вывод данных и

ошибок к содержимому данного файла

cmd&>> file Пример 3

$ ls -l f1.txt; ls -l /root/ &>> ls2

–rw-rw-r– 1 max1 max1 6 мая 9 07:21 f1.txt

$ ls -l f1.txt; ls -l /root/ &>> ls2

–rw-rw-r– 1 max1 max1 6 мая 9 07:21 f1.txt

max1@hp:~$ cat ls2

ls: невозможно открыть каталог '/root/': Отказано в доступе.

ls: невозможно открыть каталог '/root/': Отказано в доступе.

Направить стандартный данных в заданный file1,

стандартный вывод ошибок в указанный file2

Направить стандартный вывод данных и ошибок в

стандартный вывод, так и в заданные файлы.

сmd 2 >&1 |tee файлы или cmd |& tee файлы

Пример 4

$ pwd; ls -l /root/ 2>&1 |tee ls3

/home/max1

ls: невозможно открыть каталог '/root/': Отказано

в доступе.

$ cat ls3

ls: невозможно открыть каталог '/root/':Отказано

в доступе.

2.11 Сохранение дескрипторов файлов в переменных.

Допускается указывать имя переменной вместо

числового обозначения дескриптора.

Пример. Нахождение дескриптора файла.

$ exec 4>file;echo "OK">&4; cat ./file

OK

max@hp:/dev/fd$ ls

0 1 2 255 4

max@hp:/dev/fd$ cat 4

OK

Пример использования дескрипторов числом более 9

$ mv f1.txt f1

$ echo f1 {f1fd}>xyz

  • Читать дальше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: