쉘 스크립트공부중... 리다이렉션 활용은 뭐가 있을까요?
글쓴이: khaic0c0 / 작성시간: 목, 2003/06/05 - 3:20오전
현재 리디렉션에 대해서 공부하고 있는데... 궁금한것이 있내요..
복습좀 해보면...
grep da * 1>&2 : 표준출력을 표준에러와 같은곳으로 보낸다.
grep da * 2>&1 : 표준에러를 표준출력과 같은곳으로 보낸다.
이제 질문이요~~
먼저, ls -al 를 했을때 이 명령에 대한 표준출력과 표준에러를 각각,
ls-al.txt, ls-al_err.txt의 파일로 보내려면 어떻게 할수 있나요?
ls -al >ls-al.txt 2> ls-al_err.txt 이쯤 하면 되나요?
그런데.. 확인해볼 방법이 없는데 ls 하고 에러나질 않는데...
어떤 명령어로 하면 ls-al_err.txt 에 뭔가 보여줄수 있을까요?
즉, 에러를 어떻게 하면 이쪽으로 보내줄수 있나요?
그리고 ls-all_all.txt 라는 파일에 표준출려과 표준에러를 같이 보낼순 없나요?
ls -al &>ls-al_all.txt 이쯤 하면 되는건지요? ^^;
그리고 전 사실... 1>&2 와 2>&1 가 이해가 잘 가질 않는대요.
같은곳으로 보낸다는게 무슨 말인지 모르겠내요...
이거 활용은 어떻게 할수 있을까요?
질문이 좀 많고...두서가 없는것 같내요... ^^;
답변좀 많이 해주시면 정말 감사하겠습니다.
Forums:
1. 다음 순서로 실행하고.. $ find / -name mysq
1. 다음 순서로 실행하고..
$ find / -name mysql
$ find / -name mysql >ls-al.txt 2> ls-al_err.txt
$ find / -name mysql >ls-al_all.txt 2> ls-al_all.txt
$ find / -name mysql >ls-al_allll.txt 2>&1
2. 다음을 확인해보면..
$ cat ls-al.txt
$ cat ls-al_err.txt
$ cat ls-al_all.txt
$ cat ls-al_allll.txt
3. 어느정도.. 파악.. 예스?
표준입력,표준출력,표준에러를 알자!유닉스에서는 꼭 알아야 무식하다
표준입력,표준출력,표준에러를 알자!
유닉스에서는 꼭 알아야 무식하다는 소리 안 듣습니다.
쉘을 통해서 프로그램을 실행하면 부모(쉘)로 부터 3개의 fd 를 상속받습니다.
0,1,2 번이 이미 열려있는 상태입니다. 따라서 새 파일을 열면 보통 fd가 3번이 됩니다.
이 0,1,2 는 각각 fopen 으로 열려 있는 상태로서 FILE *stdin, *stdout, *stderr 이란 이름으로 연결되어 있습니다.
따라서 표준에러를 출력하려면
if(stderr!=NULL) fprintf(stderr," This is error \n");
코드에서 if(stderr!=NULL) 는 안써도 됩니다. (만약 stderr이 안 열려있다면, fprintf 에서 실패할테니까)
마찬가지로 표준출력으로 출력하려면
이 3개의 fd가 0,1,2 인 관계로 쉘에서 0< 1> 2> 이렇게 씁니다.
(줄여서 쓸때는 < > 2> 이렇게 써도 됩니다)
1>&2 는 쉘이가진 1번 fd 를 2번 fd 에게 출력을 전환하라는 명령입니다.
또하나 주의.
ls -al aaa 1> output.txt 2>&1
ls -al aaa 2>&1 1> output.txt
중 위에것이 더 낫습니다. 아래것은 출력이 의도대로 되지 않습니다.
그 이유를 잘 생각해 보세요
내 자식들도 나처럼 !!
Re: 쉘 스크립트공부중... 리다이렉션 활용은 뭐가 있을까요?
이 부분 말을 조금 바꾸면 이해하기 쉬울 것 같습니다.
표준 출력을 표준 에러와 같은 곳으로... 가 아니라,
표준 출력을 (현재) 표준 에러가 가고 있는 곳으로... 라고 바꾸세요.
&기호는, 다른 분이 설명하신 내용에서 fd(file descriptor)를 지칭하기 위한 기호로 이해하시면 됩니다.
그냥 >2라고 하면 2라는 이름을 가진 파일로 보내어지겠죠?
쉘에 따른 차이를..
쉘에 따라 리다이렉션 구문이 다르죠.
(위에는 전부 본쉘 계열인거 같은데.. )
-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===
댓글 달기