Как ниже работ перенаправления оболочки? Кажется, является сложным для понимания порядка выполнения. Какое-либо легкое объяснение?
uuencode host-file < host-file >encodedfile
uuencode
команда. host-file
его аргумент. < host-file
перенаправления файл к стандартному входу команды. >encodedfile
вывод перенаправлений команды в файл.
Когда консольная программа запускается, она открывает три стандартных дескрипторов файлов:
0 STDIN
1 STDOUT
2 STDERR
Обычно дескриптор файла STDIN читает из терминального входа (т.е. клавиатура). Но то, когда <
перенаправление используется, введите, читается из того файла вместо этого. Аналогично, STDOUT обычно пишет в терминал, но когда >
используется, производится, записан в тот файл вместо этого.
STDERR может так же быть перенаправлен при помощи 2>
. Вы могли бы также видеть, что STDERR был перенаправлен к тому же месту как STDOUT при помощи 2>&1
.
uuencode host-file < host-file >encodedfile
Давайте разломаем это на 4 части:
uuencode
название команды для выполнения. Оболочка ищет переменную окружения PATH ($PATH) и ищет названный исполняемый файл uuencode
в каждом каталоге в ПУТИ. В стандартной установке это будет /usr/bin/uuencode
. Программа Uuencode берет двоичный файл и превращает его в текст в специальном формате, таким образом, он может быть отправлен по сети, которая не может обработать символы неASCII.host-file
параметр командной строки к uuencode
. uuencode
управляйте нуждается в одном аргументе так, чтобы он мог поставить имя файла в закодированной версии. Первая строка закодированного файла будет выглядеть примерно так: begin 644 host-file
< host-file
оболочка с помощью названного файла host-file
поскольку стандарт ввел (stdin) для uuencode
процесс. Итак, когда uuencode
чтения некоторые байты входа, вместо того, чтобы произойти из Вашей клавиатуры, они прибывают из того файла.>encodefile
оболочка с помощью названного файла encodedfile
как стандартный вывод (stdout). Таким образом, когда uuencode
записи некоторый вывод, вместо того, чтобы идти в Ваш экран, это переходит к тому файлу. Нет действительно порядка выполнения, только начиная с одной команды, uuencode
, выполняется. Если Вы хотите технические детали, продолжать читать.
Негласно, вызовы оболочки fork()
, затем дочерний процесс открывается host-file
файл для чтения, открывается encodedfile
файл для записи и вызовы exec()
, который заменяет дочерний процесс (копия процесса оболочки) с uuencode
процесс. Дочерний процесс затем становится uuencode
, с входным дескриптором файла (путь операционная система отслеживает открытые файлы), набор к тому из host-file
и набор дескриптора выходного файла к тому из encodedfile
.