Вопрос на <> Оператор Перенаправления Linux

Я учусь для своего LPIC-1, и я смущен <> оператор перенаправления. Я знаю, что официальное определение для этого - то, что это "заставляет указанный файл использоваться и для стандартного ввода-вывода и для стандартного вывода"..., но я все еще смущен.

Кто-то мог обеспечить пример того, как/когда я использовал бы <> оператор перенаправления в Linux?

2
задан 21.05.2011, 04:07

1 ответ

Пример был бы, когда необходимо снабдить данными входных данных программы и также отправить выходные данные куда-нибудь (например, файл):

$ sort < data.txt > result.txt

это выполняет данные в data.txt посредством команды вида, и отправляет вывод в result.txt. Это идентично выполнению этого:

$ sort data.txt > result.txt

Думайте о нем как это:

(2 <- 1) -> 3

Средний файл питается к программе в номере 2, и результат наконец отправляется в 3.

4
ответ дан 08.12.2019, 05:16

Если ответ T John был тем, что Вы хотели, то Вы сделали неправильное заявление о вопросе :)

Он кратко описал операторы <and>, но Вы спросили о <>. Это - редко используемый оператор, который я не уверен, что ожидал бы видеть в LPIC-1, но только для справки (учитывая, что Вы, вероятно, сделали с тем экзаменом к настоящему времени):

При выполнении в интерактивном режиме команды без перенаправления, ее стандартный вход, вывод и ошибка будут обычно присоединены к tty; это будет читать из stdin и писать в stdout/stderr. Хотя Вы не могли бы ожидать это, те дескрипторы файлов являются обычно открытым чтением-записью. Попытайтесь запустить скрипт как

#!/bin/bash
echo "I'm writing to stdin!" >&0

Выполнение этого пустого будет работать, по крайней мере, в текущих версиях удара. Однако, когда Вы используете <и> редиректоры, stdin и stdout дескрипторы файлов только открыты для чтения и пишут соответственно, поэтому при вызове этого с входом, перенаправленным из файла -

./write-to-stdin < /tmp/some-input

это не будет работать (достаточно обоснованно). Если Вы действительно хотите программу, Вы вызываете с перенаправлением, чтобы смочь записать и записать в единственный дескриптор файла, <> сделает задание.

./read-and-write-stdin   <> /tmp/some-input-and-output
./read-and-write-stdout 1<> /tmp/some-input-and-output

Поскольку большинство программ только ожидает, что stdin будет дескриптором чтения и stdout, чтобы быть дескриптором записи, можно, вероятно, видеть, почему это скорее редко полезно, но если Вы пишете зависимые сценарии (или используете функции), можно использовать в своих интересах поведение сами.

3
ответ дан 08.12.2019, 05:16

Теги

Похожие вопросы