А поскольку я сейчас не матерюсь, чтоб никто не догадался, перейду на старославянский алфавит.
Итак: Шёл Хер по херу, встретил Хера на херу, взял Хер Хера за хер, и к херам закинул нахер.
Вот, а сейчас говорят, что пионеров ничему хорошему не учили...
exec.Есть два варианта использования:
1.
exec command — билет в один конец. Для чего это нужно я так и не понял, может умные в комментах напишут. Перед выполнением команды, bash фактически завершается, управление передаётся команде. И все...пример:
exec echo 123 — результат очень красочный. Такой же, как и с любой другой командой.2. Перенаправление. Это штука крайне нужная и очень понятная. В других, нормальных ЯП она называлась бы open.
В Basic
open "filename.txt" for input as #3В bash
exec 3<fileneme.txtВ Basic
open "filename.txt" for output as #4В bash
exec 4>filename.txtВ Basic
open "filename.txt" for append as #5В bash
exec 5>>filename.txtВ Basic
open "filename.txt" for random as #6В bash
exec 6<>filename.txtПриведу несколько полезных примеров
exec 2>/dev/null — все сообщения об ошибках отправить по пути, указанному в считалочке.На код ошибки (типа errorlevel) это не влияет.
exec 1>filename.txt все сообщения, кроме ошибок отправить в файл.exec 1>filename.txt 2>&1 все сообщения, включая ошибки отправить в файл.Стоп-стоп. Откуда взялся
&? Легко запомнить. Это костыль. Если вы не укажите &, сообщения попадут в файл с именем "1".Все помнят, что
0=/dev/stdin 1=/dev/stdout 2=/dev/stderr. Остальные 3-9 можем использовать по собственному усмотрению.Пример:
#!/bin/bash
seq 1 3|tee 1.txt > 2.txt
exec 3<1.txt
while read -u3 L1;do
exec 4<2.txt
while read -u4 L2;do
echo $L1 $L2
done
done
seq — создаем два файла, по три строки в каждомexec 3<1.txt - открываем файл для чтения с дескриптором 3read -u3 L1 читаем из файла с дескриптором 3. Дальше все аналогично.Если нужно закрыть 4, например, дескриптор за ненадобностью
exec 4>&-man tee seq
help while read exec
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate