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

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


Скачать книгу

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

      f1

      $ echo $f1fd

      11

      $ cd /dev/fd

      max@hp:/dev/fd$