BASH. Справочное пособие - страница 2
$ 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
Hello my friend
Использование команды exec с дескрипторами.
exec 0
Создадим под root myfile с двумя командами.
# cat >myfile
pwd; date
Выполнить команды из файла вместо стандартного ввода.
# exec 0 # 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 f1 $ echo $f1fd 11 $ cd /dev/fd max@hp:/dev/fd$ ls 0 1 11 2 255 4 max@hp:/dev/fd$ echo "Privet">&11 max@hp:/dev/fd$ cat 11 Privet Дескриптор файла,сохраненный в переменной оболочки может быть использован в сценарии. 2.12 Специальные имена файлов. /dev/stdin Дубликат дескриптора файла 0 /dev/stdout Дубликат дескриптора файла 1 /dev/stderr Дубликат дескриптора файла 2 /dev/fd/ /dev/tcp/ Оболочка Bash устанавливает соединение с указанным хостом через заданный порт, используя полученный в итоге дескриптор файла при переадресации ввода-вывода.