Дата:2013-01-17
0 | STDIN |
ввод
1 | STDOUT | вывод
2 | STDERR | вывод сообщений об ошибках.
STDIN - можно представить как ввод информации с клавиатуры с
последующим отображение на экран STDOUT.
Все
это по своей сути так же является файлами в ОС Linux и если
использовать
(<), (>), (>>) то в результате получим, что
эти символы
берут информацию с файла.
# cat < test1
#
ifconfig > test2
Применение
stdout для очистки файла без его удаления.
# cat /dev/null
> Files1
STDERR - Выводит сообщения об ошибках и по умолчанию он выводит их на
экран
монитора.
Перенаправление STDERR Осуществляется при помощи
cat test3 2> test4 - так например здесь должно быть выведено все из файла test3 в файл test4, однако задана двойка означающая то, что выводятся только сообщения об ошибках. В том случае если файла test3 не существует, будет выведено сообщение в файл test4 "ls: test3: Нет такого файла или каталог"
И так мы поняли, что двойка выводит сообщения об ошибке в файл, а единица может выводит данные в файл.
Теперь
# ls -al 1test 2 test test test2 2> 12test 1> 11test
в файле 12test у нас собраны ошибки
в файле 11test у нас собраны данные из команды ls.
Вывод в один и тот же файл осуществляется при помощи символа
"&>"
# ls -al 1test 2 test test test2
&> 13test
Теперь пора пришла разобраться с перенаправлениями в сценариях.
# vi
std.sh
#!/bin/bash
echo "Это ошибка" >&2
echo "Это STDOUT"
# sh std.sh
В результате, простого запуска, на экране отобразится все что идет за
echo
А вот при таком варианте в файл err.txt запишутся ошибки.
sh std.sh 2> err.txt
Перенаправление при
помощи "EXEC"
Создадим сценарий и проверим его работу.
# vi exec.sh
#!/bin/bash
exec 1> exec.txt
echo "бла бла бла 1"
echo "бла бла бла 2"
echo "хватит"
В результате при помощи команды exec произвел вывод в файл exec.txt, а
вариант перенапрвления оказался в самом сценарии.
Здесь так же имеются способы манипуляции выводом.
# vi exec1.sh
#!/bin/bash
exec 2>
ERRexec.txt
exec 1> exec1.txt
echo "бла бла бла 1"
echo "бла бла бла 2"
echo "хватит"
echo "Ошибки"
>&2
Перенаправление ввода.
Пример
1:
#!/bin/bash
exec
0< name
count=1
while
read line
do
echo "Line #$count: $line"
count=$[ $count + 1 ]
done
Пример 2:
#!/bin/bash
echo "Введите числа
после чего произойдет умножение"
exec 0< var
#count=1
if
read -t 3 -p
"Введите первое число число: " var
read -t 3 -p "Введите
второе число: " var1
then
var2=$[ $var * $var1 ]
echo $var2
else
echo "Извините вы долго
вводили данные"
fi
Создается файл var и заполняется двумя цыфрами, после чего данные
берутся из файла и происходит умножение.
Как мы поняли из вышеописанного то:
0 - STDIN
1 - STDOUT
2 - STDERR
Однако, кроме первых
трех, можно иметь до девяти дескрипторов файла.
В дальнейшем эти дескрипторы файла можно использовать для себя.
vi exec3.sh
#!/bin/bash
exec 3> testfiles3
exec 4> testfiles4
echo "вывод на монитор"
echo "вывод в testfiles3" >&3
echo "вывод в testfiles4" >&4
# vi exec5.sh
#!/bin/bash
exec 5<&0
exec 0< name
count=1
while read line
do
echo "Line #$count: $line"
count=$[ $count + 1 ]
done
exec 0<&5
#/bin/bash
exec 6<> test6
Закрывать дескрипторы файла до оконьчания сценария.
exec 7>&-
Количество просмотров: 4050
Комментарии к статье:
Добавить комментарий