Unix/Linux에서는 파이프를 사용하여 출력 및 오류 스트림을 파일에 쓸 수 있습니다. 동일한 파일에 쓸 수도 있습니다. 둘 다 파일에 쓰면서 순서를 유지하는 방법이 있습니까? 이 진술은:
swipl -s jobshop.chr < CHRInput > output 2> output
출력 스트림과 오류 스트림을 포함하는 "output"이라는 파일이 실제로 생성됩니다(일반적으로 이는 사용자와 콘솔의 상호 작용입니다). 그러나 출력 스트림은 오류 스트림 이전에 기록됩니다(대화형 콘솔을 사용할 때 오류 및 출력 스트림이 인터리브됩니다).
답변1
배쉬의 경우,
swipl -s jobshop.chr < CHRInput &> output
답변2
swipl -s jobshop.chr < CHRInput > output 2>&1
2>&1
"파일 설명자 2(표준 오류)를 연결된 파일 설명자 1(표준 출력)로 리디렉션합니다."를 의미합니다. 이 작업 은 2>&1
표준 출력 리디렉션 후에 수행되어야 합니다. 2>&1 >output
먼저 fd 2를 당시 연결된 fd 1(즉, 터미널)로 보낸 다음 fd 1을 터미널로 리디렉션합니다.
프로그램 작성 방법에 따라 터미널에서 실행될 때와 동일한 순서로 출력을 인터리브하지 않을 수 있습니다. 프로그램이 많아서 그런가완충기표준 출력으로 출력합니다. 즉, 버퍼가 가득 찼을 때만 실제로 데이터를 씁니다. 그러나 표준 출력이 터미널에 연결되면 라인 버퍼링됩니다. 즉, 버퍼가 가득 차지 않아도 모든 라인이 기록됩니다. (반면에 Stderr는 기본적으로 버퍼링되지 않습니다.) 따라서 프로그램이 버퍼를 플러시하거나 기본값을 변경하는 것과 관계없이 전체 라인을 쓰고 stderr에 쓰는지 또는 stderr에 쓰는지 여부에 관계없이 순서대로 작성하기를 원하는 경우 stderr 출력, 파일로 리디렉션이 작동하지 않을 수 있습니다.
상당히 새로운 Linux 시스템에서 리디렉션된 출력 행의 순서가 잘못된 경우 다음을 시도하십시오.
stdbuf -oL -oL swipl -s jobshop.chr <CHRInput >output 2>&1