쉘 스크립트공부중... 리다이렉션 활용은 뭐가 있을까요?

khaic0c0의 이미지

현재 리디렉션에 대해서 공부하고 있는데... 궁금한것이 있내요..

복습좀 해보면...
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 가 이해가 잘 가질 않는대요.
같은곳으로 보낸다는게 무슨 말인지 모르겠내요...
이거 활용은 어떻게 할수 있을까요?

질문이 좀 많고...두서가 없는것 같내요... ^^;
답변좀 많이 해주시면 정말 감사하겠습니다.

heungskang의 이미지

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. 어느정도.. 파악.. 예스?

xfmulder의 이미지

표준입력,표준출력,표준에러를 알자!

유닉스에서는 꼭 알아야 무식하다는 소리 안 듣습니다.

쉘을 통해서 프로그램을 실행하면 부모(쉘)로 부터 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 에서 실패할테니까)

마찬가지로 표준출력으로 출력하려면

 fprintf(stdout, "this is output ...\n");
또는 printf("this is output ... \n"); 도 똑같습니다. 

이 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
중 위에것이 더 낫습니다. 아래것은 출력이 의도대로 되지 않습니다.
그 이유를 잘 생각해 보세요

내 자식들도 나처럼 !!

2dirty의 이미지

khaic0c0 wrote:

grep da * 1>&2 : 표준출력을 표준에러와 같은곳으로 보낸다.
grep da * 2>&1 : 표준에러를 표준출력과 같은곳으로 보낸다.

이 부분 말을 조금 바꾸면 이해하기 쉬울 것 같습니다.

표준 출력을 표준 에러와 같은 곳으로... 가 아니라,
표준 출력을 (현재) 표준 에러가 가고 있는 곳으로... 라고 바꾸세요.

&기호는, 다른 분이 설명하신 내용에서 fd(file descriptor)를 지칭하기 위한 기호로 이해하시면 됩니다.
그냥 >2라고 하면 2라는 이름을 가진 파일로 보내어지겠죠?

무한포옹의 이미지

쉘에 따라 리다이렉션 구문이 다르죠.

(위에는 전부 본쉘 계열인거 같은데.. )

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.