Сколько всего способов кормить команду вводом?

9

Первое, что я заметил в Linux, - это разные способы ввода данных в команду, я знаю несколько, но я не знаю, сколько их всего.

пути, которые я знаю до сих пор:

трубопроводы:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

с клавиатуры с сигналом конца файла:

sort
>gurken
>zucker
>braunkohle

из файла:

sort foo

ЗДЕСЬ строка (на самом деле называется ЗДЕСЬ документ):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

Это все или есть еще способы сделать это, почему есть разные способы, какие-то излишние?

sharkant
источник

Ответы:

9

По крайней мере, следующее:

  1. Опции команды: foo --bar

  2. Стандартный ввод: foo | barилиbar < foo

  3. Файл (ы): foo *.*(или открыв файл (ы) с помощью кода в foo) †

  4. Экспорт среды: export foo=bar; baz

  5. Окружающая среда (без экспорта): foo=bar bazилиenv foo=bar baz

  6. ЗДЕСЬ док: foo << EOF bar EOF

  7. ЗДЕСЬ строка: foo <<< bar

  8. сигналы kill -SIGUSR1 $procid

  9. Целый ряд межпроцессных взаимодействий , таких как сокеты, TCP, отображенные в память файлы

† да, я понимаю, что stdin - это файл (или похожий на файл). И передача таких файлов в действительности такая же, как передача параметров

Нил Макгиган
источник
1
Вы можете добавить foo < barв качестве дополнительного варианта (файл через stdin)
Hagen von Eitzen
14

Для начала, sort << HEREи так далее, это не строка здесь. Это здесь документ. Здесь строка использует <<<оператор. Это в bash (и некоторых других оболочках).

В общем, есть два пути. Один через стандартный ввод (и перенаправления), а другой через параметры.

  1. Стандартный ввод и его перенаправления

    Это поток, который по умолчанию подключен к терминалу, в котором выполняется команда и связан с fd (дескриптор файла) 1. Он передает все, что набрано в терминале. Хотя он (вход) может быть перенаправлен как при использовании канала, так |и при использовании здесь-документов или здесь-строк. Тогда вход не поступает с терминала, а присоединяется к стандартному выводу команды, предшествующей каналу. Разные оболочки имеют разные перенаправления, поэтому для этой категории вы должны проверить документацию оболочки. Ищите входные перенаправления.

  2. параметры

    Это то, что в вашем примере sort foo. Вызывая программу или функцию, вы передаете ей один или несколько параметров. Локальный файл - только одна возможность. Параметр может содержать URL или что-то еще. Варианты здесь бесконечны.

Подводя итог, можно выделить два основных способа:

  • первый абстрагируется от внутренней логики приложения и манипулирует стандартным вводом на уровне ОС / оболочки,

  • в то время как второй связан с внутренностями приложения, и именно они предлагают безграничные возможности, основываясь на параметрах вызова в качестве интерфейса.

Для обоих способов ответ - нет ограничений. Хотя фактические ограничения идут с ОС / оболочкой и самим приложением.

Кусалананда
источник