답변:
예, 출력을 파일로 리디렉션하면 가능합니다.
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>&1
STDERR을 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
또한 리디렉션stterr
someFile.txt에