답변:
예, 출력을 파일로 리디렉션하면 가능합니다.
SomeCommand > SomeFile.txt
또는 데이터를 추가하려는 경우 :
SomeCommand >> SomeFile.txt
stderr이것을 원한다면 이것을 사용하십시오 :
SomeCommand &> SomeFile.txt
또는 이것을 추가하려면 :
SomeCommand &>> SomeFile.txt
콘솔 과 파일 에 모두 stderr출력을 표시 하려면 다음을 사용하십시오.
SomeCommand 2>&1 | tee SomeFile.txt
(출력 만 원하는 경우 2위의 항목을 삭제하십시오. )
make명령 출력을 파일로 가져 오려면 대신 다음 구문이 필요합니다. make > someFile.txt 2>&1(source : linuxquestions.org/questions/linux-newbie-8/… )
명령의 출력을 파일에 쓰려면 기본적으로 일반적으로 사용되는 10 가지 방법이 있습니다.
있습니다
n.e.구문 열에는 "존재하지 않는"를 의미한다.
방법이 있지만 열에 맞추기에는 너무 복잡합니다. 목록 섹션에서 유용한 링크를 찾을 수 있습니다.
|| visible in terminal || visible in file || existing
Syntax || StdOut | StdErr || StdOut | StdErr || file
==========++==========+==========++==========+==========++===========
> || no | yes || yes | no || overwrite
>> || no | yes || yes | no || append
|| | || | ||
2> || yes | no || no | yes || overwrite
2>> || yes | no || no | yes || append
|| | || | ||
&> || no | no || yes | yes || overwrite
&>> || no | no || yes | yes || append
|| | || | ||
| tee || yes | yes || yes | no || overwrite
| tee -a || yes | yes || yes | no || append
|| | || | ||
n.e. (*) || yes | yes || no | yes || overwrite
n.e. (*) || yes | yes || no | yes || append
|| | || | ||
|& tee || yes | yes || yes | yes || overwrite
|& tee -a || yes | yes || yes | yes || append
command > output.txt
표준 출력 스트림은 파일로만 리디렉션되며 터미널에서는 보이지 않습니다. 파일이 이미 존재하면 덮어 씁니다.
command >> output.txt
표준 출력 스트림은 파일로만 리디렉션되며 터미널에서는 보이지 않습니다. 파일이 이미 존재하면 새 데이터가 파일 끝에 추가됩니다.
command 2> output.txt
표준 오류 스트림은 파일로만 리디렉션되며 터미널에서는 보이지 않습니다. 파일이 이미 존재하면 덮어 씁니다.
command 2>> output.txt
표준 오류 스트림은 파일로만 리디렉션되며 터미널에서는 보이지 않습니다. 파일이 이미 존재하면 새 데이터가 파일 끝에 추가됩니다.
command &> output.txt
표준 출력 및 표준 오류 스트림은 모두 파일로만 리디렉션되며 터미널에는 아무것도 표시되지 않습니다. 파일이 이미 존재하면 덮어 씁니다.
command &>> output.txt
표준 출력 및 표준 오류 스트림은 모두 파일로만 리디렉션되며 터미널에는 아무것도 표시되지 않습니다. 파일이 이미 존재하면 새 데이터가 파일 끝에 추가됩니다.
command | tee output.txt
표준 출력 스트림은 파일로 복사되며 터미널에서 여전히 볼 수 있습니다. 파일이 이미 존재하면 덮어 씁니다.
command | tee -a output.txt
표준 출력 스트림이 파일로 복사되며 터미널에서 계속 볼 수 있습니다. 파일이 이미 존재하면 새 데이터가 파일 끝에 추가됩니다.
(*)
Bash에는 StdErr 만 두 번째 명령으로 파이프 할 수있는 약식 구문이 없습니다.이 명령 tee은 테이블을 완성하기 위해 다시 결합 해야합니다. 정말로 그런 것이 필요하다면 "stdout이 아닌 stderr를 파이프하는 방법"을보십시오. 스트림 스왑 또는 프로세스 대체를 사용하여이를 수행하는 방법에 대해 스택 오버플로 에서
command |& tee output.txt
표준 출력 및 표준 오류 스트림은 모두 터미널에서 여전히 보이는 동안 파일로 복사됩니다. 파일이 이미 존재하면 덮어 씁니다.
command |& tee -a output.txt
표준 출력 및 표준 오류 스트림은 모두 터미널에서 여전히 보이는 동안 파일로 복사됩니다. 파일이 이미 존재하면 새 데이터가 파일 끝에 추가됩니다.
2>&1STDERR을 STDOUT으로 1>&2리디렉션하고 STDOUT을 STDERR로 3>&1리디렉션하며 스트림 3을 STDERR로 리디렉션합니다.
sh: 1: Syntax error: "&" unexpected사용할 때 |& tee. 다른 쉘이 사용되고있는 것 같습니다. 버전 4.3.11 (1)-릴리스를 echo $SHELL표시 /bin/bash하고 $SHELL --version표시합니다. #!/bin/bash파이썬 스크립트를 사용해 보았지만 여전히 얻습니다 sh: 1: Syntax error. 필요한 것을 얻었으므로 서버 사이 sh와 bash서버 에서 이상한 점을 정렬하는 것을 포기했습니다 . 감사.
sh이 아닌 bash(또는 어쩌면 bash에 sh... 모드). 신뢰할 수없고 다른 서브 쉘을 시작했는지 여부를 무시하고 로그인 쉘을 표시 ps -p $$ -o cmd=하므로 현재 쉘 프로세스가 정확히 무엇을 사용 echo $SHELL중인지 확인할 수 있습니다.
tee출력을 파일로 보내는 데 사용할 수도 있습니다 .
command | tee ~/outputfile.txt
약간의 수정도 stderr을 잡을 것입니다 :
command 2>&1 | tee ~/outputfile.txt
또는 약간 짧고 덜 복잡합니다.
command |& tee ~/outputfile.txt
tee명령 출력을 실시간으로 보면서 캡처 할 수있는 경우에 유용합니다 .
2>&1어떻게 해석 합니까?
명령 출력을 파일로 리디렉션 할 수 있습니다.
your_command >/path/to/file
파일을 덮어 쓰지 않고 명령 출력을 파일에 추가하려면 다음을 사용하십시오.
your_command >>/path/to/file
고려해야 할 개선 사항-
다양한 스크립트가 색상 코드를 출력에 삽입하여 로그 파일을 어지럽히 지 않을 수 있습니다.
이 문제를 해결하기 위해 sed 프로그램을 사용하여 해당 코드를 제거 할 수 있습니다 . 예:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
ls및 등의 채색 된 출력을 생성하는 많은 명령에 유의하십시오 . grep--color=auto
some_command | tee command.log그리고 some_command > command.log그들이에 명령 출력을 저장하지 않는 문제가 command.log실시간으로 파일을.
이러한 문제를 피하고 명령 출력을 실시간으로 저장하기 위해 패키지 unbuffer와 함께 제공되는을 추가 할 수 있습니다 expect.
예:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
다음을 log.py포함 한다고 가정 합니다.
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
당신은 실행할 수 있습니다 unbuffer python log.py | tee command.log또는unbuffer python log.py > command.log
추가 정보 : 명령 출력을 파일에 실시간으로 저장하려면 어떻게해야합니까?
someCommand 2> someFile.txt하고someCommand 2>> someFile.txt또한 리디렉션stterrsomeFile.txt에