Ласкаво просимо до чергової п’ятниці ...
Пора познайомитися з крихітною частиною терміналу. Після довгих роздумів я вирішив створити допис про стандартні потоки; Хоча це буде поверхово, я думаю, це те, що повинен знати кожен.
Стандартний потік
Стандартний потік Він складається з декількох каналів зв'язку між користувачем та терміналом. Ці вхідні / вихідні «канали» відображають або фіксують інформацію під час виконання команди.
3 підключення вводу-виводу: stdin Стандартний вхід, stdout Стандартний вихід, stderr Стандартна помилка.
stdin: стандартне введення
Стандартне введення - це спосіб, яким ми збираємо інформацію від команди через труби, переспрямування, клавіатуру тощо. Ми ідентифікуємо його з дескриптором файлу 0.
Прикладом 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 до файлу
- серед інших
Ось і все для сьогоднішніх людей. Ми читаємо та дякуємо, що завітали. 😀
Цікаво. Завдяки вашим підручникам, я люблю Bash набагато більше.
Шановний, цікавий, однак у вас є помилка в наступному рядку:
"І при перенаправленні файлу на команду ls", має бути "і при перенаправленні файлу на команду сортування".
Привітання.
На початку тексту є помилка. Коли ви вказуєте команду "ls", вона повинна бути "сортувати":
"Візьміть всю інформацію, яка є у списку - у цьому випадку цифри, написані випадковим чином - і перенаправіть файл на команду ls (тут це буде сортування)"
Вітаю та дякую, що поділилися своєю роботою
Це чудово підходить для cron, де ви хочете, щоб вихідні дані були очищені (/ dev / null), але помилки зберігалися у файлах. Крім того, коли я роблю це, я зазвичай використовую команду date, щоб точно вказати, коли вони не вдалися.
Bash (sh) має ці інструменти, настільки розроблені філософією Unix, "робіть одне, і робіть це добре"
Ну, я нічого не дізнався
Ха-ха добре це пояснено досить добре, чого ви не зрозуміли?