Що робить голий <?


10

bash схоже, не скаржиться, якщо ти виконуєш таку команду

$ < some-file-that-exists

Здається, нічого не відбувається.

Ви також можете використовувати

$ <<<"any string"

і навіть процес заміщення.

Отже, що саме це робить, і чому це дозволено. Чи може це бути корисним для чого-небудь?


BTW: Для великої ZSH "<foobar" - це те саме, що "менше foobar", як і ваш foobar для переадресації на оболонку. Я думаю, що це досить інтуїтивна поведінка. Голий <призведе до помилки ( zsh: parse error near `\n'), оскільки аргумент не наводиться.
математика

@math ви отримаєте подібну помилку bash, але це цікаво less.
Вибухові таблетки

Відповіді:


20

<встановлює перенаправлення для команди, яка може відбуватися до або після вказівок щодо перенаправлення. Тобто

$ < file wc

працює також

$ wc < file

Але якщо ви не даєте команди, bash налаштовує перенаправлення і більше нічого не робить. Для переадресації вводу це означає те, що ви побачили, нічого, якщо файл існує і читабельний. Якщо файл не існує або не читабельний, bash подасть сигнал про помилку. Для перенаправлення виводу файл виводу буде створений, якщо його не існує. Будь-який наявний вихідний файл буде усічений, якщо >використовується; відсутність усікання, якщо >>використовується.


Іншими словами, вони є лаконічними і існують
храповий вирод

@Kyle Jones Я думаю, ви не відповідали двом операторам в останньому реченні.
jamesbtate

@Puddingfox Дякую Я відредагував перебіг пропозиції в кінці, щоб уточнити.
Кайл Джонс

Чи є причини для використання < file wcvs. wc < file?
Вибухові таблетки

1
@tandu Це зручно при використанні інтерактивних оболонок. Скажімо, у вас є команда, яка використовує перенаправлення, і ви хочете повторити її з іншим останнім аргументом. Якщо перенаправлення знаходиться на початку рядка, легко набрати control-P, а потім відредагувати останній аргумент, не пропускаючи мову "<foo> bar 2> & 1" так, як це було б у кінці. Крім того, я не знайшов для цього ніякої користі.
Кайл Джонс

5

<читає з stdin за замовчуванням або файл. ваш вираз нічого не робить із введенням, тому що ви нічого не зробили після читання.

якщо ви зробите <деякий файл-який існує> вихідний файл в кінці, ви побачите, що ви тільки що прочитали у вмісті першого файлу і записали його у другий файл.

<<< - тут формат doc, тому він читається з рядка, а не з файлу. cat <<< "будь-яка рядок", щоб побачити, що ви прочитали.


2
для подальшої довідки, будь ласка, відредагуйте свою відповідь, щоб додати детальну інформацію, а не коментар
Нейт Коппенгавер

2
"якщо ви зробите <деякий файл-який існує> вихідний файл наприкінці, ви побачите, що ви тільки що прочитали у вмісті першого файлу і записали його у другий файл." Це неправильно; без команди вихідний файл буде усічений до нуля байтів.
Кайл Джонс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.