셸 출력 리디렉션,분석 > /dev/null 2>1&
우리가 일반적으로 작성하는 프로그램처럼,프로그램은 외부 입력을 처리합니다.,그런 다음 지정된 위치에 작업 결과를 출력합니다.。
인터랙티브 프로그램에서,사용자의 키보드와 마우스 입력,결과는 사용자 화면에 출력됩니다.,재생 장치에서도。
백그라운드에서 실행되는 일부 프로그램의 경우,입력은 일부 외부 파일에서 올 수 있습니다.,작업 결과는 일반적으로 다른 파일에 기록됩니다.。
그리고 프로그램이 실행되는 동안,몇 가지 핵심 정보가 있을 것입니다.,예를 들어 예외 스택,외부 인터페이스 호출 등,
이들은 모두 로그 파일에 기록됩니다.。
쉘 스크립트도 마찬가지,그러나 우리가 일반적으로 쉘 명령을 사용할 때,키보드 입력을 통해 더 자주,然后在屏幕上
查看命令的执行结果。특정 상황에서,쉘 명령의 실행 결과를 파일에 저장해야 합니다.,那么我们
就需要使用输入输出的重定向功能。
文件描述符
当执行shell命令时,기본적으로 3개의 파일이 열립니다.,각 파일에는 사용을 용이하게 하는 해당 파일 설명자가 있습니다.:
따라서 우리는 일반적으로 쉘 명령을 실행합니다.,둘 다 기본적으로 키보드에서 입력을 받습니다.,그리고 그 결과를 콘솔에 출력。
그러나 파일 디스크립터의 기본 지점을 다음으로 변경할 수 있습니다.,입력 및 출력의 리디렉션을 실현하기 위해。比如我们将1
指向文件,그러면 표준 출력이 파일로 출력됩니다.。
输出重定向
输出重定向的使用方式很简单,일부 기본 명령은 다음과 같습니다.:
우리는 사용>
또는>>
출력을 리디렉션。기호의 왼쪽은 파일 설명자를 나타냅니다.,그렇지 않으면 1을 의미합니다.,
그것은 표준 출력입니다,기호의 오른쪽은 파일일 수 있습니다.,출력 장치가 될 수도 있습니다.。사용할 때>
정적 경로는 실제로,
오른쪽 파일이 존재하는지 여부를 판단합니다.,있으면 먼저 삭제,그런 다음 새 파일을 만듭니다.,不存在
的话则直接创建。하지만 사용할 때>>
추가할 때,기존 파일은 삭제되지 않습니다.。
출력 리디렉션에 대한 더 나은 이해를 위해,리디렉션의 "매력"을 느껴보십시오.,다음 예를 살펴보겠습니다.:우리는 테스트 디렉토리를 만듭니다,
디렉토리 아래에 하나의 a.txt 파일만 있습니다.。
在执行ls a.txt b.txt
之后,一共有两种输出,그들 중ls: 无法访问b.txt: 没有那个文件或
目录
是错误输出,a.txt
是标准输出。
在上述命令中,我们将原来的标准输出重定向到了out文件中,所以控制台只剩下了错误提示。
并且当执行了追加操作时,out文件的内容非但没有被清空,反而又多了一条a.txt
。
同理,我们也可以将错误输出重定向到文件中:
>/dev/null 2>&1
。这条命令其实分为两命令,一个是>/dev/null
,另一个是2>&1
。
这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,
所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null
之后,
标准输出就会不再存在,没有任何地方能够找到输出的内容。
这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出
将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。
linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向
的命令,所以>/dev/null 2>&1
的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),
然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出
同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,
也不会有任何信息输出到文件中。