banner banner banner
BASH. Справочное пособие
BASH. Справочное пособие
Оценить:
Рейтинг: 0

Полная версия:

BASH. Справочное пособие

скачать книгу бесплатно


$ cat >f30.txt

Hello

$ date >| f30.txt

$ cat f30.txt

Пн 12 июл 2021 08:03:13 MSK

2.9 Переадресация ввода-вывода с использованием дескрипторов файлов.

Файловый дескриптор – целое число,которое указывает доступ к файлу.

Стандартный ввод stdin дескриптор 0.

Стандартный вывод stdout дескриптор 1.

Стандартный вывод ошибок stderr дескриптор 2. Клавиатура stdin файл.

Экран stdout файл. Файловый дескриптор привязан к индефикатору процесса.

Пример

# sleep 1000 &

[2] 5021

# cd /proc/5021/fd ; ls

0 1 2

cmd >&n Направить результат команды в файл с

дескриптором n.

Пример 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