Добре дошли в друг петък ...
Време е да опознаете малка част от терминала. След дълги размисли реших да създам публикация за стандартни потоци; Въпреки че ще бъде повърхностно, мисля, че това е нещо, което всеки трябва да знае.
Стандартен поток
Стандартен поток Състои се от няколко комуникационни канала между потребителя и терминала. Тези входни / изходни „канали“ показват или улавят информация при изпълнение на команда.
3-те I / O връзки са: стандартния вход Стандартен вход, стандартния изход Стандартен изход, STDERR Стандартна грешка.
stdin: Стандартен вход
Стандартният вход е начинът, по който улавяме информация от команда, или чрез тръби, пренасочване, клавиатура и т.н. Идентифицираме го с дескриптора на файла 0.
Пример за stdin би бил:
сортиране <списък
Взема цялата информация, която е в списъка - в този случай числата, написани на случаен принцип, и когато пренасочва файла към командата ls, сортира числовия списък по азбучен ред. В този пример флаговете са неявни.
stdout: Стандартен изход
Стандартният изход, както подсказва името му, показва изхода на команда чрез конзолата. Ако напишем ls, цялата информация, която ни показва на екрана, е стандартният изход. Той е представен от дескриптор 1.
Сега ще се опитам да създам stdin и stdout със скрипт, написан на bash, просто защото обичам bash hahaha. 🙂
тест.ш
#! / bin / bash ако [-t 0]; след това echo "Използвате stdout" elif [-t 1]; след това echo "Използвате stdin" else echo "Brutal error" fi
Сега екранна снимка, която показва как да използвате скрипта. При пренасочване или използване на канал с използване на скрипта тест -t за да се знае дали се изпълнява само 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 Downloads Foo &> info.txt
Този файл ще съдържа информацията за грешката при стартиране на ls на Foo и ще изброи директориите под Downloads.
И накрая, какво означава този известен 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 "направете едно нещо и го направете добре"
Ами нищо не съм открил
Хаха добре обяснено е доста добре, какво не сте разбрали?