답변:
1
나타낸다 표준 출력 (표준 출력). 2
나타낸다 표준 오차 (열려진).
따라서 2>&1
표준 출력이 리디렉션되는 곳으로 표준 오류를 보내라고 말합니다. 전송 된 /dev/null
결과는 출력을 무시하는 것과 비슷합니다.
0
(stdin), 1
(stdout) 및 2
(stderr)는 실제로 파일 디스크립터 이므로 쉘은 리디렉션을 위해 앰퍼샌드를 앞에 두어야합니다. 이 경우 파일 설명자를 복제하여 두 정보 스트림을 효과적으로 병합합니다.
curl http://www.google.com 2>/dev/null
커맨드 라인은 여기서 "2"가 stderr을 의미하고 실제로 curl 명령에 전달하는 두 번째 매개 변수가 아니라는 것을 어떻게 알 수 있습니까?
stderr
직선에서 /dev/null
대신으로 보냅니다 . 당신은 시도하여 실제로 그것을 볼 수 있습니다 curl
, curl 1>/dev/null
그리고 curl 2>/dev/null
바로 출력 변화를 볼 수 있습니다. 다시 앰퍼샌드는 파일 디스크립터로 리디렉션 될 때만 필요합니다.
가져 오기 http://www.google.com
에서 배경 과 폐기 모두 stdout
와 stderr
.
curl http://www.google.com > /dev/null 2>&1 &
와 같다
curl http://www.google.com > /dev/null 2>/dev/null &
0
, 1
및 2
표준 파일 대표 기술자 의 POSIX 운영 체제를. 파일 기술자는 (기본적으로) 파일 또는 소켓에 대한 시스템 참조 입니다.
C에서 새 파일 디스크립터를 작성하면 다음과 같이 보일 수 있습니다.
fd = open("data.dat", O_RDONLY)
대부분의 유닉스 시스템 명령어는 약간의 입력을 받아 결과를 터미널로 출력합니다. curl
지정된 URL에있는 모든 것을 가져오고 ( google dot com ) 결과를에 표시합니다 stdout
.
마찬가지로 당신은 말했다 <
및 >
파일처럼 다른 곳으로 명령의 출력을 리디렉션하는 데 사용됩니다.
예를 들어,에서 ls > myfiles.txt
, ls
현재 디렉토리의 내용을 얻고 >
그 출력을 리디렉션 myfiles.txt
(파일 그렇지 않으면 덮어,이 만들어진 존재하지 않지만, 당신이 사용할 수있는 경우 >>
대신 >
대신 파일에 추가 할). 위의 명령을 실행하면 터미널에 아무것도 표시되지 않습니다. 그것은 일반적으로 유닉스 시스템에서 성공을 의미합니다. 이를 확인 cat myfiles.txt
하여 파일 내용을 화면에 표시합니다.
첫 번째 부분은 > /dev/null
을 리디렉션 stdout
즉, curl
로의 출력 /dev/null
(앞서이에 이상) 2>&1
리디렉션 stderr
받는 사람 stdout
(단지로 리디렉션 된 /dev/null
때문에 모든 것이로 전송됩니다 /dev/null
).
의 왼쪽 2>&1
을 알려줍니다 무엇을 리디렉션됩니다, 오른쪽 측면을 설명 곳 이다. 는 &
구별하는 오른쪽에 사용되는 stdout (1)
또는 stderr (2)
라는 이름의 파일에서 1
또는 2
. 따라서 2>1
이름이 지정된 새 파일 (아직 존재하지 않는 경우)을 1
만들고 stderr
결과를 덤프합니다 .
/dev/null
빈 파일이며, 작성된 모든 것을 버리는 데 사용되는 메커니즘입니다. 따라서
의 출력을 curl http://www.google.com > /dev/null
효과적으로 억제하고 curl
있습니다.
그러나 왜 터미널에 여전히 어떤 것들이 표시됩니까? 이다 없는 curl
일반 출력의 만에 전송 된 데이터는 stderr
, 진보와 진단 정보뿐 아니라 표시하기 위해 여기에 사용 된 오류를 .
curl http://www.google.com > /dev/null 2>&1
curl
의 출력과 curl
진행 정보를 모두 무시합니다 . 결과는 터미널에 아무것도 표시되지 않습니다.
&
끝에 당신이 같이 명령을 실행하는 쉘에게 어떻게 작업 의 배경 . 이로 인해 명령이 백그라운드에서 비동기 적으로 실행되는 동안 프롬프트 가 즉시 리턴됩니다. jobs
터미널에서 현재 작업 유형 을 보려면. 이것은 시스템에서 실행되는 프로세스 와 다릅니다 . top
터미널에서 해당 유형을 확인하십시오 .
/dev/null
합니까? curl
적어도 어딘가에 유용한 결과를 원하지 않습니까?
다음과 같이 이해합니다.
화면에서 명령의 출력 및 오류 정보 만 읽으려면 다음과 같이 작성하십시오.
curl http://www.google.com
그리고 나중에 검토를 위해 출력 화면을 터미널 화면 대신 파일에 저장하려는 경우 다음과 같이 쓸 수 있습니다.
curl http://www.google.com > logfile
그러나 이런 방식으로 StdErr 정보는 >
StdOut으로 리디렉션 만하기 때문에 생략 됩니다 logfile
.
따라서 명령이 실행되지 않으면 명령의 오류 정보에 신경 2>&1
쓰면 StdErr를 StdOut로 접는 것을 사용하여 StdOut과 StdErr을 결합해야 하므로 다음 명령 행을 쓸 수 있습니다.
curl http://www.google.com > logfile
2> & 1