LINUX.ORG.RU

Откуда такой синтаксис в Bash: 1> и 0<

 


0

1

В интернетах пишут, что разницы между 1> и >, а также между 0< и <, нет никакой. По факту выполнения команд - так и есть. Но какой из них более правильный?
И вообще, почему писали раньше так, а теперь так?
Если это так «модно», то есть ещё подобные аналоги команд, которые были сокращены со временем?

★★★★★

Последнее исправление: Desmond_Hume (всего исправлений: 2)
Ответ на: комментарий от realbarmaley

Честно говоря, не понимаю эту логику. По мне, экран - это «вывод», а запись «чего-то куда-то» - это типа «ввод». К примеру, cat 0< test.txt ВЫВЕДЕТ на устройство вывода (в данномм случае, терминал, монитор и т.п.) данные ИЗ файла test.txt, тогда как echo ‘123’ 1> test.txt ВВЕДЁТ данные «откуда-то» (в данном случае, будет вводиться вывод команды echo) –> «куда-то», то есть В файл test.txt
Я понимаю, что данному источнику можно вполне доверять, НО … блин, вот именно логику это ломает всё.
Просто когда яблоко зелёное и твёрдое, ты понимаешь, логически, что раз оно зелёное и твёрдое, то оно неспелое. Но если тебе показывают пальцем на красное, и уже мягкое яблоко, говоря, что, на самом деле, оно неспелое, потому что так гласит книга автора N … то ломается вообще вся картина мира)). Может просто нужно привыкнуть называть спелые яблоки неспелыми? Или, всё же, какая-то логика есть?

Desmond_Hume ★★★★★
() автор топика
Последнее исправление: Desmond_Hume (всего исправлений: 1)
Ответ на: комментарий от Desmond_Hume

Логика очень простая - потоки ввода и вывода со стороны вызываемого приложения. «>» - это перенаправление потока. Вывод echo перенаправляется в файл вместо терминала.

alexru ★★★★
()

Всё, мужики, дошло. Смотрите:

  1. echo «123» 1> test.txt перевожу на «язык логики»:
    «Поток вывода команды echo «123» перенаправляется (значок >) в файл test.txt»
    ИЛИ
    «Вывод команды echo «123» ВЫводится В файл test.txt»

  2. cat 0< test.txt перевожу на «язык логики»:
    «Файл test.txt ВВОДится на обработку программе cat»

Ну как, правильно перевёл?

Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от firkax

Эх … я мог бы и 20 лет назад с этим разобраться. И даже 30 лет назад, теоретически если. Но, увы, мы живём в настоящем времени :)). Имеем то, что имеем. И нужно с этим что-то делать именно сейчас).

Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от Desmond_Hume

Ну как, правильно перевёл?

Да.

А ещё можно так:

command 2>&1 - выполнить команду, поток ошибок перенаправить в стандартный вывод

но 0, 1, 2 - это всего лишь файловые дескрипторы. Как тебе такое?

exec 5<>"file.txt"  # Открыть файл для ввода и вывода, ассоциировать с ним дескриптор 5

echo "Line 1" >&5  # Записать в файл

echo "Line 2" >&5  # Записать в файл

command 2>&5  # Выполнить команду, поток ошибок перенаправить в файл

exec 5<>"file.txt"  # Переоткрыть файл (чтобы поставить указатель на начало файл)

read A <&5  # Считать и файла строку. Результатом будет "Line 1"

Больше тут: https://tldp.org/LDP/abs/html/io-redirection.html

Kroz ★★★★★
()