Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

예를 들어 Linux/Bash에서 stdin, stdout, stderr 리디렉션

Linux/Bash 셸에는 stdin 명령을 실행할 때 사용할 수 있는 세 가지 데이터 스트림이 있습니다. , 표준 출력, 및 stderr . 사용 방법은 다음과 같습니다.

표준 입력표준 출력표준 오류 콘솔에 텍스트를 표시할 수 있으며 각 스트림에서 출력되는 데이터를 다른 프로그램으로 보낼 수 있습니다.

이를 표준 스트림이라고 합니다. .

표준 입력이란? (표준 입력)?

텍스트 입력 스트림.

애플리케이션은 stdin을 통해 텍스트를 수락할 수 있습니다. 입력으로.

stdout이란? (표준 출력)?

프로그램의 텍스트 출력 스트림입니다.

애플리케이션은 데이터를 stdout을 통해 다른 프로그램(또는 보기용 콘솔)으로 보냅니다. .

stderr(표준 오류)이란 무엇입니까?

프로그램의 텍스트 오류 출력 스트림입니다.

프로그램에서 오류가 발생하면 stdout을 통해 오류와 관련된 데이터를 보내야 합니다. 스트림.

…네, 하지만 그게 실제로 무엇을 의미합니까?

컴퓨터 프로그램은 입력 및 출력 데이터로 작업을 수행합니다. 예를 들어 프로그램이 수학 방정식을 받아들이고 이에 대한 솔루션을 제공할 수 있습니다.

프로그램에 방정식을 입력하는 방법과 프로그램의 답을 OUT에 얻는 방법이 필요합니다. 또한 방정식을 풀 수 없는지 알고 싶으므로 다른 OUTPUT과 별도로 생성된 오류를 확인하려고 합니다.

바로 stdin입니다. , 표준 출력 , 및 stderr .

모든 것이 동일한 방식으로 작동하면 삶이 더 쉬워지므로 이러한 입력, 출력 및 오류 스트림이 표준화되어 명령줄용으로 구축된 응용 프로그램이 모두 동일한 방식으로 작동합니다.

따라서 표준 스트림 . 각 스트림에는 0-3의 숫자 식별자가 있습니다.

<일>
0 표준 입력
1 표준 출력
2 표준 오류

stdin에서 리디렉션/파이핑 , 표준 출력Bash/Shell의 표준 오류

Linux 셸에 입력하는 것은 텍스트 스트림입니다. 사용자가 입력하면 텍스트 스트림이 콘솔 입력으로 제공됩니다.

애플리케이션이 실행되고 애플리케이션에서 출력된 텍스트 데이터는 읽을 수 있도록 표시하기 위해 콘솔에 제공됩니다.

이것은 콘솔에서 작업할 때 모두 기본 동작이지만 변경할 수 있습니다. 스트림을 리디렉션할 수 있습니다. 예를 들어 프로그램의 출력을 콘솔이 아닌 파일로 직접 스트리밍하여 볼 수 있습니다.

한 프로그램의 출력을 다른 프로그램의 입력으로 직접 리디렉션할 수 있습니다.

다음은 리디렉션 및 파이핑을 사용한 몇 가지 기본 예입니다.

리디렉션

일반적으로 에코 명령은 콘솔에 텍스트를 인쇄합니다:

echo "hello there!"

표준 출력 echo 프로그램이 화면에 표시할 기본 경로를 사용하고 있습니다.

리디렉션 다른 곳으로 보낼 수 있습니다. 여기에서 파일로 전송됩니다.

echo "hello there!" > test.txt

text.txt라는 파일 텍스트 "안녕하세요!"가 포함된 생성됩니다. (파일이 이미 존재하면 덮어쓰게 됩니다. ).

>>을 사용하여 파일을 추가할 수 있습니다. > 대신

다음으로 stdin을 리디렉션해 보겠습니다. < 사용

cat < test.txt

고양이 명령은 text.txt의 내용을 읽습니다. stdin으로 스트리밍한 다음 고양이 명령은 다음을 수행하도록 설계되었습니다. 제공된 데이터를 stdout에 인쇄합니다. , 기본적으로 볼 수 있는 콘솔입니다. 따라서 hello there!만 출력됩니다. 콘솔에.

파일의 데이터가 stdin으로 전송되었습니다. cat 명령의 경우 - 리디렉션되었습니다.

일종의 속임수입니다. 고양이 명령은 파이프 없이 매개변수로 전달된 파일 이름에서 읽으려고 시도하지만 이 예에서는 가장 간단한 명령입니다.

stdin을 리디렉션할 수 있습니다. 및 표준 출력 동일한 명령에서:

cat < test.txt > output.txt

표준 입력 리디렉션 중이며 test.txt를 읽고 있습니다. 고양이 속으로 프로그램 및 stdout 고양이에서 프로그램이 output.txt라는 파일로 전송되고 있습니다. .

다시 말하지만 이것은 실제로 cat을 사용하기 때문에 부정 행위입니다. 파일을 복사하는 명령이지만 다른 명령에 대한 설명에 의존하지 않는 간단한 예입니다.

마지막으로 stderr을 리디렉션할 수 있습니다. 읽고자 하는 고유한 스트림 번호를 지정하여 스트림(stdout) 기본값이므로 지정할 필요가 없습니다.):

cat nofile.txt 2> error.txt

표준 출력 숫자 2로 식별됩니다. – 고양이가 오류를 생성하면 이 스트림을 통해 error.txt 파일로 전송됩니다. .

위의 예는 error.txt라는 파일을 생성합니다. 텍스트 포함:

cat: nofile.txt: No such file or directory

...고양이로 명령에서 파일 nofile.txt를 찾을 수 없습니다. .

동시 리디렉션

위의 예에서 stderr 스트림은 숫자 식별자로 식별되었습니다. 즉, stdout을 리디렉션할 수 있습니다. 및 stderr 리디렉션할 명령을 지정하여 동일한 명령에서:

echo "hello there! 1>test.txt 2>error.txt

위, stdout test.txt로 전송됩니다. 및 stderr error.txt로 전송됩니다. .

배관

파이핑은 리디렉션과 동일하지만 stdin만 처리합니다. , 및 stdout 오류는 무시됩니다.

echo "hello there!" | cat

여기, 파이프(| ) 파이프(리디렉션) stdout 에코 stdin 명령 고양이 명령.

결론

명령줄 응용 프로그램으로 작업하는 것이 처음에는 직관적이지 않은 것처럼 보일 수 있지만 작업을 자동화할 때 강력한 도구입니다. 표준 입력표준 출력, 및 stderr표준 스트림 이러한 유연성의 초석입니다. 명령을 함께 연결하여 거의 모든 작업을 처리할 수 있는 복잡한 워크플로를 만들 수 있습니다.