리디렉션

newman0315의 이미지

sort list.txt 하나 sort < list.txt하나 같은것아닌가요?

왜 이걸 리디렉션이라고 하는거에요? 왜 입출력이 바뀐거죠?

swish95의 이미지

sort list.txt 하면 뒤에 인자를 읽어서 list.txt 를 sort 프로세서가 해당 파일을 읽어서 처리하는거고

sort < list.txt 하면
1. list.txt 파일의 내용을 OS 가 읽어서 그걸 표준스트림으로 보낸다.
2. sort 프로세서는 표준스트림으로 들어온 내용을 그냥 처리

이때 sort 프로세스는 파일을 읽는 동작이 없으니까 말그대로 list.txt 의 내용이 리다이렉션 된거죠

------------------------------------------------------------
ProgrammingHolic

익명 사용자의 이미지

?!

두 명령어가 엄연히 (사실은 좀 미묘한 점에서) 다른 것은 맞습니다만, sort에 파일을 읽는 동작이 없다고 설명하는 것도 이상한데요.

swish95의 이미지

제가 아는 수준이 이정도라서요 ㅠ.ㅠ
친절한 설명 부탁드립니다.
정말 몰라서 묻는겁니다 ^^

------------------------------------------------------------
ProgrammingHolic

익명 사용자의 이미지

sort list.txt 하면 sort가 list.txt라는 파일 이름을 매개변수로 받게 됩니다. sort가 직접 파일을 열고 읽어야겠지요.

sort < list.txt 하면 sort는 아무 매개변수도 받지 않고, (sort의 기본 동작대로) 표준 입력을 읽습니다. 하지만 shell이 미리 list.txt을 열어서 표준 입력을 통해 읽을 수 있도록 "표준 입력을 redirection" 해 두었기 때문에, 여전히 sort는 list.txt를 읽게 됩니다.

위 내용까지는 귀하의 설명과 대충 유사합니다만, 제가 지적하고 싶은 건 "OS 가 읽어서 그걸 표준스트림으로 보낸다" 부분입니다.

어떤 의도로 쓰셨는지는 잘 모르겠으나, 그러한 표현은 이해하기에 따라서는 "OS가 list.txt의 내용을 다 읽은 뒤 별도의 파이프 같은 걸 통해 sort에 전달해 준다" 처럼 읽힐 수도 있을 것 같아서요.

그렇게 하는 게 비효율적인 점(전체 파일 내용이 읽어들여진 뒤 파이프를 거쳐야 하므로)은 둘째치고서도, redirection을 이용해 실행한 프로그램이 해당 파일을 열어 놓은 상태인지 아닌지가 중요한 상황이 간혹 있습니다.

대개 shell은 해당 파일을 직접 연 뒤, 표준 입력에 해당하는 file descriptor(0) 자리로 dup 함으로써 이 기능을 구현합니다. 그 파일을 읽는 건 실행된 프로그램(이 경우 sort)의 몫입니다.

swish95의 이미지

제가 생각이 짧았네요

님이 말씀하신 부분까지 설명하자면 "|" 까지 설명해야 되고 그 차이까지 언급하는건 질문 작성자님한테 과도한 정보가 될꺼 같아서 개략적으로 썻던건데
충분히 오해할만 하네요 ^^

역쉬 "0"과 "1" 의 세계에 사는 개발자들은 모호한 표현은 삼가해야 겠군요 ㅎㅎ

------------------------------------------------------------
ProgrammingHolic

김정균의 이미지

개인적 의견 입니다만, 저도 처음 답변 주신 분의 의견과 같이 생각 하고 있었습니다. sort 가 파일을 읽지 않는다는 말은 저는 sort 가 파일을 open 해서 control 하지 않는다라고 받아 들였고 그래서 처음 답변 올리신 분의 의견에 동의 한다고 생각 했는데, 말 그대로 read 라면 님의 말씀대로 다르게 받아 들일 수 있겠네요. 좀 더 넓은 사고를 하게 되었습니다. 감사합니다.

대개 shell은 해당 파일을 직접 연 뒤, 표준 입력에 해당하는 file descriptor(0) 자리로 dup 함으로써 이 기능을 구현합니다. 그 파일을 읽는 건 실행된 프로그램(이 경우 sort)의 몫입니다.
익명 사용자의 이미지

허허 졸지에 하룻강아지 꼴이 됐군요 orz.

근데 뭐 어차피 익명이고 하니 그냥 계속 뻔뻔하게 지내렵니다.

p.s. 혹시 관리자는 익명 답변자 식별 가능합니까?

김정균의 이미지

겸손이 지나치십니다. 하룻강아지라니요 고수의 냄새가 퐁퐁 풍기시는데 :)

P.S.
관리자도 익명을 알 수는 없습니다. 다만 등록 IP가 기록되어 동일인 여부 정도는 확인이 가능 합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.