Народ, всем доброго времени суток.
Вот никак не могу понять в чем принципиальная разница между перенаправлением ввода/вывода (<,>,>>) и каналами (|)? Может у кого есть время объяснить новичку?
Спасибо
Перенаправления ввода-вывода, перенаправляют STDOUT в файл, и STDIN из файла [вместо устройства стандартного ввода-вывода, коим является терминал]. Канал(pipe) перенаправляет STDOUT [одной программы] в STDIN [другой программы]
то есть, получается <,>,>> используем только с файлами, а | только с процессами? Тогда такой вопрос:
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.
В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.
В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?
потому что > предназначен для записи в файл. т.е. у него
STDOUT > file
STDIN < file
STDOUT | STDIN
поток ввода/вывода, и файлы это как бы объекты разной природы... т.е. STDOUT > STDIN и STDOUT > file если бы были допустимы одновременно, то фигня получается ...
поток ввода/вывода, и файлы это как бы объекты разной природы... т.е. STDOUT > STDIN и STDOUT > file если бы были допустимы одновременно, то фигня получается ...
Ради общего развития, у процесса (программы) еще есть
2>filename
тем самым мы перенаправляем STDERR в файл.
Теперь вопрос, как STDOUT направить в один процесс, а STDERR исходного процесса в другой процесс?
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.
В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.
В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?
Потому что для интерпретатора энти <, <<, >, >> и | совершенно разные вещи. Перенаправление ищет, (или создаёт) файл куда-откуда надо записать-прочитать. А конвейер подает выход одного процесса на вход другого.
А чтобы не было вопросов, просто берём книжку, и читаем, здесь и здесь (конвейер).
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу