C 쉘에서 stderr을 stdout으로 리디렉션
에서 다음 명령을 실행할 때 csh
아무것도 얻지 못했지만에서 작동 합니다. 표준 오류를 표준 출력으로 리디렉션 할 수 bash
있는 동등한 기능이 csh
있습니까?
somecommand 2>&1
csh
쉘 리디렉션 과정에서 파일 핸들을 조작하는 광범위한 기능이 있다고 알려진 적이 결코 없다.
다음을 사용하여 표준 출력과 오류를 파일로 리디렉션 할 수 있습니다.
xxx >& filename
그러나 그것은 표준 오류를 현재 표준 출력으로 리디렉션하는 것과는 다릅니다 .
그러나 기본 운영 체제가 파일 시스템에서 프로세스의 표준 출력을 노출하는 경우 (Linux와 /dev/stdout
마찬가지로) 다음과 같이 해당 방법을 사용할 수 있습니다.
xxx >& /dev/stdout
이렇게하면 표준 출력 과 표준 오류가 모두 현재 표준 출력 과 동일한 위치로 이동하게 bash
됩니다 2>&1
.
이것은 csh
기능 이 아님을 명심하십시오 . 표준 출력을 파일로 노출 하지 않는 운영 체제에서 실행 하는 경우이 방법을 사용할 수 없습니다.
그러나 다른 방법이 있습니다. 를 사용하여 파이프 라인에 전송하면 두 스트림을 하나로 결합 할 수 있으며 |&
, 그러면 표준 입력을 표준 출력에 쓰는 파이프 라인 구성 요소를 찾는 것뿐입니다. 당신이 그런 것을 알지 cat
못한다면, 당신이 그것에 대해 어떠한 주장도하지 않으면 정확히하는 일 입니다. 따라서 다음과 같은 특정 사례 에서 목적을 달성 할 수 있습니다 .
xxx |& cat
물론, 실행을 중지 아무도 없다 bash
(이 시스템의 어딘가에에있어 가정) 내에서csh
당신에게 추가 기능을 제공하는 스크립트. 그런 다음 csh
어려움을 겪을 수 있는 더 복잡한 경우에 해당 셸의 풍부한 리디렉션을 사용할 수 있습니다 .
더 자세히 살펴 보겠습니다. 먼저 echo_err
문자열을 쓸 실행 파일 을 만듭니다 stderr
.
#include <stdio.h>
int main (int argc, char *argv[]) {
fprintf (stderr, "stderr (%s)\n", (argc > 1) ? argv[1] : "?");
return 0;
}
그런 다음 작동 상태를 보여주는 제어 스크립트 test.csh
:
#!/usr/bin/csh
ps -ef ; echo ; echo $$ ; echo
echo 'stdout (csh)'
./echo_err csh
bash -c "( echo 'stdout (bash)' ; ./echo_err bash ) 2>&1"
echo
는 PID와는 ps
당신이있어 보장 할 수 있도록 단순히 csh
이 스크립트를 실행할 수 있습니다. 다음을 사용하여이 스크립트를 실행할 때 :
./test.csh >test.out 2>test.err
(초기 리디렉션은 스크립트 실행 bash
을 csh
시작 하기 전에에서 설정 됨 ) out/err
파일을 검사하면 다음이 표시됩니다.
test.out:
UID PID PPID TTY STIME COMMAND
pax 5708 5364 cons0 11:31:14 /usr/bin/ps
pax 5364 7364 cons0 11:31:13 /usr/bin/tcsh
pax 7364 1 cons0 10:44:30 /usr/bin/bash
5364
stdout (csh)
stdout (bash)
stderr (bash)
test.err:
stderr (csh)
당신은 것을이 볼 수있는 test.csh
과정이 있다 는 C 쉘에서 실행하고 호출하는 것을 bash
당신에게 전체가주는 내에서 bash
리디렉션의 힘을.
The 2>&1
in the bash
command quite easily lets you redirect standard error to the current standard output (as desired) without prior knowledge of where standard output is currently going.
I object the above answer and provide my own. csh
DOES have this capability and here is how it's done:
xxx |& some_exec # will pipe merged output to your some_exec
or
xxx |& cat > filename
or if you just want it to merge streams (to stdout) and not redirect to a file or some_exec:
xxx |& tee /dev/null
As paxdiablo said you can use >&
to redirect both stdout and stderr. However if you want them separated you can use the following:
(command > stdoutfile) >& stderrfile
...as indicated the above will redirect stdout to stdoutfile and stderr to stderrfile.
What about just
xxx >& /dev/stdout
???
xxx >& filename
Or do this to see everything on the screen and have it go to your file:
xxx | & tee ./logfile
I think this is the correct answer for csh.
xxx >/dev/stderr
Note most csh are really tcsh in modern environments:
rmockler> ls -latr /usr/bin/csh
lrwxrwxrwx 1 root root 9 2011-05-03 13:40 /usr/bin/csh -> /bin/tcsh
using a backtick embedded statement to portray this as follows:
echo "`echo 'standard out1'` `echo 'error out1' >/dev/stderr` `echo 'standard out2'`" | tee -a /tmp/test.txt ; cat /tmp/test.txt
if this works for you please bump up to 1. The other suggestions don't work for my csh environment.
참고URL : https://stackoverflow.com/questions/13720246/redirect-stderr-to-stdout-in-c-shell
'Programing' 카테고리의 다른 글
Android OS에서 사용할 수있는 IPC 메커니즘은 무엇입니까? (0) | 2020.12.03 |
---|---|
Webstorm의 프로젝트 창에서 누락 된 폴더 (0) | 2020.12.03 |
Ajax 호출 후 Jquery 이벤트가 실행되지 않습니다. (0) | 2020.12.03 |
Angular 2에서 제출 한 후 양식을 지우는 방법은 무엇입니까? (0) | 2020.12.03 |
MYSQL 파티셔닝이란? (0) | 2020.12.03 |