Linux에서`>`가 자동으로 실패하는 원인은 무엇입니까?


20

이 명령을 실행했습니다.

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json

partyapp_dump.json파일에 데이터를 덤프 합니다. 그러나 모든 데이터가 화면에 인쇄되고 빈 partyapp_dump.json파일이 생성됩니다.

왜 이런 일이 일어날 수 있습니까? 나는 테스트 ls > partyapp_dump.json했고 완벽하게 작동했습니다.

답변:


40

> 를 사용 하면 표준 출력 만 리디렉션합니다. 시도 >이 대신 오류 출력을 리디렉션합니다. &> 를 사용 하여 둘 다 리디렉션 하십시오 .


1
참고로, &>Bash 4.0 및 iirc 최신 버전의 zsh에서만 작동합니다. 보다 편리한 솔루션은 foo > bar 2&>1. 참조 : mywiki.wooledge.org/BashFAQ/014
Rein Henrichs

6
@Rein Henrichs : 저것은 2> & 1, 2 &> 1
아님

'2', '1'의 위치 ( '&')에 대한
폐음

1
@ hometoast : 니모닉을 의미합니까? :) 폐렴은 폐를 의미합니다 ...
carlpett

22

파이썬 앱은 일반 STDOUT 대신 STDERR 출력 채널에 출력을 작성해야합니다. 셸 구성을 사용하면 >출력 채널에 기록 된 데이터 만 포착하고 리디렉션하지만 실제로 인쇄 할 수있는 몇 가지 다른 채널이 있으며, 가장 일반적인 두 번째 채널은 일반적으로 오류에 사용됩니다.

STDERR (두 번째 채널)를 다음과 같이 트래핑 할 수 있습니다.

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2>&1

2>&1구조체 정상 출력 채널 에러에 대한 출력 스트림을 연결한다. 프로그램이 오류 채널에서 캡처하려는 출력을 생성하는 것은 드문 경우입니다. 일반적으로 애플리케이션 데이터가 아닌 디버그 정보 용으로 예약됩니다. 제발 몇 가지주의이 스크립트를 사용 이 비표준 방식으로 작동하고 있기 때문이다.

다음과 같이 출력 및 오류 채널을 다른 파일로 덤프 할 수도 있습니다.

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2> error_output.txt

5

이미 제안 된 stderr vs stdout 출력 설명 외에도 응용 프로그램은이 두 스트림을 모두 무시하고 출력을 위해 명시 적으로 "/ dev / tty"를 열 수 있습니다.


1

는 IF noclobberbash는 옵션을 설정 한 후> 리디렉션 대상 파일이 이미 존재하는 경우 (하지 자동이기는하지만) 실패합니다.

이식성 cmd >| file을 높이려면 기존 파일을 강제로 덮어 쓰는 데 사용 하십시오.


0

손실 된 경우 항상 strace로 실행하여 어떤 프로세스가 수행되는지 확인할 수 있습니다.

strace -f command

1
정답이지만 특히 관련이 없습니다. 남자가 오류 스트림을 관리하지 않았다면 그는의 출력으로 무엇을 해야할지 모른다고 생각합니다 strace.
Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.