Термінал п’ятниця: Стандартний потік

Ласкаво просимо до чергової п’ятниці ...

Пора познайомитися з крихітною частиною терміналу. Після довгих роздумів я вирішив створити допис про стандартні потоки; Хоча це буде поверхово, я думаю, це те, що повинен знати кожен.

Стандартний потік

Стандартний потік Він складається з декількох каналів зв'язку між користувачем та терміналом. Ці вхідні / вихідні «канали» відображають або фіксують інформацію під час виконання команди.

Коротка схема на стандартних потоках.

Коротка схема на стандартних потоках.

3 підключення вводу-виводу: stdin Стандартний вхід, stdout Стандартний вихід, stderr Стандартна помилка.

stdin: стандартне введення

Стандартне введення - це спосіб, яким ми збираємо інформацію від команди через труби, переспрямування, клавіатуру тощо. Ми ідентифікуємо його з дескриптором файлу 0.

Дескриптор є показником доступу - у цьому випадку - до вхідних та вихідних каналів. Це значення int, як правило, 0, 1 і 2.

Прикладом stdin може бути:

сортувати <перелік

Він бере всю інформацію, що міститься у списку - у цьому випадку числа, записані випадковим чином, і при перенаправленні файлу на команду ls сортує числовий список за алфавітом. У цьому прикладі прапори неявні.

stdout: стандартний вихід

Стандартний висновок, як випливає з назви, відображає вихід команди через консоль. Якщо ми пишемо ls, вся інформація, яку вона показує нам на екрані, є стандартним результатом. Він представлений дескриптором 1.

Тепер я спробую створити екземпляр stdin і stdout за допомогою сценарію, написаного на bash, просто тому, що я люблю bash, ха-ха-ха. 

тест.ш

#! / bin / bash if [-t 0]; потім echo "Ви використовуєте stdout" elif [-t 1]; тоді echo "Ви використовуєте stdin" else echo "Brutal error" fi

Тепер скріншот, який демонструє, як користуватися сценарієм. Під час перенаправлення або використання каналу з використанням сценарію тест -т щоб знати, чи виконується лише скрипт stdout, а якщо ні, то це очевидно stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Розглянутий сценарій та його результати ...

Розглянутий сценарій та його результати ...

Не забудьте змінити команду та практику, щоб навчитися.

stderr: Стандартна помилка

Стандартна помилка - це спосіб відображення помилок або діагностики програм. Він представлений дескриптором 2.

Для розуміння концепції така ситуація: коли ми хочемо зберегти помилку команди, перше, про що ми замислюємося, - це перенаправлення виводу на звичайний текст.

ls> info.txt

Це могло б спрацювати, інформація про команду буде зберігатися у текстовому файлі. Але при збереженні помилки воно не зберігається, але відображається на екрані, а звичайний текстовий файл порожній.

Натомість, якщо ми використовуємо 2> для позначення збереження stderr у файлі:

ls foo 2> info.txt

Тепер він збереже інформацію про помилку у текстовому файлі.

Більшість Склад дозволити stderr і stdout зберігатись в одній командній команді за допомогою &> де Foo - неіснуючий каталог

ls Завантаження Foo &> info.txt

Цей файл міститиме інформацію про помилку під час запуску ls на Foo та перелічить каталоги в розділі Завантаження.

І нарешті, що робить той знаменитий 2> & 1?

Просте перенаправлення stderr на stdout. Це & в середині> і 1 означає, що воно перенаправить на stdout. Якби його не було, це було б приблизно так ... "перенаправити помилку на файл 1".

А за допомогою цього можна перенаправити:

  • stdout до файлу
  • stderr у файл
  • stdout до stderr
  • stderr до stdout
  • stderr і stdout до файлу
  • серед інших

Це все на сьогодні люди. Читаємо один одного і дякуємо, що зайшли. 