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.