Bash에서 stdin, stderr 및 stdout이란 무엇입니까?

What Are Stdin Stderr



터미널에서 명령을 실행할 때마다 표준 입력 , 표준 오류 , 그리고 표준 출력 bash가 생성하는 세 가지 데이터 스트림입니다. 명령줄에 익숙하다면 이미 이러한 기능을 활용했을 수 있습니다. 기본적으로 한 명령에서 다른 명령으로 데이터를 파이핑/리디렉션할 수 있습니다.

방법을 확인해보자 표준 입력 , 표준 오류 , 그리고 표준 출력 작동 및 사용 방법.







stdin, stdout 및 stderr

컴퓨팅에서 스트림이라는 용어는 데이터를 전송할 수 있는 것을 나타냅니다. 여기에서 세 스트림 모두 데이터로 텍스트를 전달합니다.



물 흐름과 마찬가지로 데이터 흐름에도 두 개의 끝점이 있습니다. 근원과 유출이 있다. 터미널에서 실행 중인 명령은 스트림의 어느 한 지점에 있을 것입니다. 스트림을 사용하여 두 개의 터미널 창, 두 개의 다른 명령, 심지어 파일까지 연결할 수 있습니다!



특별 스트림에 대한 간략한 분석을 살펴보겠습니다.





  • stdin: 표준 입력을 나타냅니다. 텍스트를 입력으로 받습니다.
  • stdout: 표준 출력을 나타냅니다. 명령의 텍스트 출력은 stdout 스트림에 저장됩니다.
  • stderr: 표준 오류를 나타냅니다. 명령에 오류가 발생할 때마다 오류 메시지가 이 스트림에 저장됩니다.

Linux에서는 거의 모든 스트림이 파일인 것처럼 취급됩니다. 파일을 읽고 쓸 수 있는 것처럼 이러한 스트림에서 데이터를 읽고 쓸 수 있습니다.

파일에 액세스하는 쉬운 방법은 파일과 관련된 고유한 파일 설명자 번호를 사용하는 것입니다. 이러한 스트림의 경우 각각에 할당된 고유한 값이 있습니다.



  • 0: 표준 입력
  • 1: 표준 출력
  • 2: 표준 오류

작동 중인 stdin, stdout 및 stderr

액션을 통해 이러한 스트림에 대해 자세히 알아보는 것으로 시작해 보겠습니다. stdin으로 시작하겠습니다.

다음 명령을 실행합니다.

$읽다

이 명령은 키보드의 입력이 필요합니다. 여기에서 읽기 도구는 stdin에서 입력을 받고 있습니다. 이제 stdout을 살펴보자.

먼저 명령을 실행하십시오.

$ -NS

여기서 ls 명령은 현재 디렉토리에 있는 파일을 나열합니다. 목록은 다음으로 전송됩니다. 표준 출력 터미널에서 출력합니다. 이제 stderr을 확인해보자.

오류가 발생할 수 있는 방법은 다양합니다. 이 예에서 ls를 잘못된 인수로 보내면 오류가 발생합니다.

$ -NS아무것

여기에 이름이 없는 파일이 없습니다. 이것이 ls가 반환하는 메시지가 다음으로 전송되는 이유입니다. 표준 오류 .

이것은 stdin 및 stdout 스트림을 최대한 활용하는 일반적인 기술입니다. 예를 들어 설명하겠습니다.

$던졌다 '안녕 세계' | 꽉 붙잡음안녕하십니까

여기, | 기호는 배관을 담당합니다. 출력 던졌다 생성은 다음과 같이 작성됩니다. 표준 출력 개울. 그런 다음 파이핑은 grep 명령에 대해 stdout의 내용을 stdin으로 리디렉션합니다. 이것이 grep이 작업을 수행할 콘텐츠를 아는 방법입니다.

stderr 및 stdout을 모두 다음 명령으로 파이프하려면 |&를 대신 사용하십시오.

$던졌다안녕하세요 세계| & 고양이

$아무것| & 고양이

스트림 리디렉션

이제 이러한 스트림이 어떻게 작동하는지 알았으니 리디렉션하는 방법을 살펴보겠습니다. 배관은 방향 전환의 한 형태입니다. 그러나 stdin 및 stdout만 포함됩니다. Bash는 세 가지 스트림 모두에 대한 특정 제어를 허용합니다.

표준 출력 콘텐츠를 파일로 리디렉션하려면 > angle 뒤에 대상 파일 이름을 추가합니다.

$던졌다안녕하세요 세계>안녕하세요.txt

여기서 echo 명령의 출력은 hello.txt 파일에 저장됩니다.

파일이 이미 존재하는 경우 위의 명령이 파일을 덮어씁니다. 이를 방지하려면 파일 이름이 고유한지 확인하십시오. 덮어쓰지 않으려면 >>를 대신 사용할 수 있습니다. 대상 파일의 끝에 출력을 추가합니다.

$던졌다 '안녕 세계' >>안녕하세요.txt

stdin의 목표는 입력으로 작업하는 것입니다. 이 또한 리디렉션될 수 있습니다. 예를 들어, 키보드에서 입력을 입력하는 대신 파일에서 로드할 수 있습니다.

이 명령에서 cat은 hello.txt 파일에서 직접 입력을 받습니다.

$고양이 <안녕하세요.txt

다른 예를 통해 리디렉션을 확인해 보겠습니다. 이번에는 Python 스크립트가 포함됩니다.

$# pyin.py
$ 이름= 입력('이름을 입력하시오N')
$이메일 = 입력('이메일 입력N')
$인쇄('당신의 이름은 %s이고 이메일은 %s입니다'%(이름, 이메일))

스크립트에 대한 입력은 hello.txt에 있습니다.

$고양이안녕하세요.txt

스크립트에 대한 입력으로 파일을 보내 보겠습니다.

$ python3 pyin.파이 <안녕하세요.txt

흥미롭게도 둘 다 리디렉션할 수 있습니다. 표준 입력 그리고 표준 출력 같은 명령줄에서. 여기에서 다음 명령은 hello.txt를 다음과 같이 사용합니다. 표준 입력 그리고 보내 표준 출력 파일에 대한 명령.

$ python3 pyin.파이 <안녕하세요.txt >산출.txt

stderr을 리디렉션하는 것은 stdout과 유사합니다. 그러나 stderr을 나타내기 위해서는 설명 ID 2를 언급해야 합니다. 그렇지 않으면 stdout만 사용합니다.

여기에서 콘텐츠를 리디렉션할 것입니다. 표준 오류 텍스트 파일로.

$아무것2>error.txt

Stdout 및 Stderr 리디렉션

예, 둘 다 동시에 리디렉션할 수 있습니다. 리디렉션하기 전에 설명 ID 1과 2를 언급하기만 하면 됩니다.

$던졌다안녕하세요 세계1>output.log2>디버그 로그

마지막 생각들

표준 입력 , 표준 출력 , 그리고 표준 오류 bash는 기본적으로 제공하는 멋진 기능입니다. bash 스크립팅에 관심이 있다면 이를 사용하면 까다로운 상황에서 매우 유용할 수 있습니다.

bash 스크립팅에 대해 더 알고 싶으십니까? 시작하겠습니다 bash 스크립팅 초보자 가이드 !

즐기다!