–Логическое НЕ $!cmd
Пример 5
$ date || touch f81.txt; ls f81.txt
Сб 30 мая 2020 06:43:33 MSK
ls: невозможно получить доступ к 'f81.txt': Нет такого файла или каталога
$ date && touch f81.txt; ls f81.txt
Сб 30 мая 2020 06:43:54 MSK
f81.txt
2.8 Простая переадресация ввода-вывода.
Ниже отображены формы переадресации ввода-вывода
cmd>file Направить результат команды в файл.
Пример 1
$ date >f30.txt; cat f30.txt
Вт июн 11 22:10:14 MSK 2019
cmd>> file Добавить результат команды в файл
Пример 2
$ date >>f30.txt; cat f30.txt
Вт июн 11 22:10:14 MSK 2019
Вт июн 11 22:11:45 MSK 2019
cmd файла. Пример 3 $ cat Вт июн 11 22:10:14 MSK 2019 Вт июн 11 22:11:45 MSK 2019 Пример 4 Встраиваемая строка. Представить текст заданного слова в качестве входных данных для указанной команды. $ cat <<<"Privet" Privet Пример 5 cmd <>file Записать в файл результат команды, содержимое файла не нарушается. $ date <> f30.txt; cat f30.txt Вт июн 11 21:58:17 MSK 2019 Вт июн 11 17:15:49 MSK 2019 cmd >| file Направить результат команды в файл переписав его содержимое. Пример 5 Направить результаты в файл, переписав его содержимое. $ date Пн 12 июл 2021 08:02:24 MSK $ 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 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