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

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

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

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

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

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

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

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 до файлу
  • серед інших

Ось і все для сьогоднішніх людей. Ми читаємо та дякуємо, що завітали. 😀


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   eliotime3000 - сказав він

    Цікаво. Завдяки вашим підручникам, я люблю Bash набагато більше.

  2.   Квінсі Магуо - сказав він

    Шановний, цікавий, однак у вас є помилка в наступному рядку:

    "І при перенаправленні файлу на команду ls", має бути "і при перенаправленні файлу на команду сортування".

    Привітання.

  3.   Мігель - сказав він

    На початку тексту є помилка. Коли ви вказуєте команду "ls", вона повинна бути "сортувати":
    "Візьміть всю інформацію, яка є у списку - у цьому випадку цифри, написані випадковим чином - і перенаправіть файл на команду ls (тут це буде сортування)"

    Вітаю та дякую, що поділилися своєю роботою

  4.   дорожник - сказав він

    Це чудово підходить для cron, де ви хочете, щоб вихідні дані були очищені (/ dev / null), але помилки зберігалися у файлах. Крім того, коли я роблю це, я зазвичай використовую команду date, щоб точно вказати, коли вони не вдалися.

    Bash (sh) має ці інструменти, настільки розроблені філософією Unix, "робіть одне, і робіть це добре"

  5.   Лоло - сказав він

    Ну, я нічого не дізнався

    1.    Голос - сказав він

      Ха-ха добре це пояснено досить добре, чого ви не зрозуміли?