리디렉션. "<>", "<&" 및 ">&-"란 무엇입니까?

리디렉션. "<>", "<&" 및 ">&-"란 무엇입니까?

<>– 몇 달 전에 어떤 웹사이트에서 이 연산자를 봤는데 무슨 뜻인지 기억이 안 나요. 어쩌면 내가 틀렸을 수도 있고 ksh에 없을 수도 있습니다 <>.

a<&ba- 이 연산자가 입력 스트림을 출력 스트림과 병합한다는 것을 알고 있습니다 b. 내가 맞나요? 하지만 어디에 사용해야 할지 모르겠습니다. 몇 가지 예를 들어주실 수 있나요?

>&-– 나는 그것에 대해 아무것도 모른다. 예를 들어, 그것은 무엇을 의미합니까 2>&-?

답변1

~에서http://www.manpagez.com/man/1/ksh/:

   <>word        Open file word for reading and writing as  standard  out-
                 put.

   <&digit       The standard input is  duplicated  from  file  descriptor
                 digit  (see  dup(2)).   Similarly for the standard output
                 using >&digit.

   <&-           The standard input is closed.  Similarly for the standard
                 output using >&-.

를 입력하면 이러한 세부정보를 모두 확인할 수 있습니다 man ksh.

특히 2>&-: 표준 오류 스트림을 닫습니다. 즉, 명령이 더 이상 STDERR에 쓸 수 없어 중단됩니다.기준이를 위해서는 쓰기가 가능해야 합니다.


파일 디스크립터의 개념을 이해하려면,(Linux 시스템의 경우)당신은 볼 수 있습니다/proc/*/fd (및 / 또는 /dev/fd/*):

$ ls -l /proc/self/fd
insgesamt 0
lrwx------ 1 michas users 1 18. Jan 16:52 0 -> /dev/pts/0
lrwx------ 1 michas users 1 18. Jan 16:52 1 -> /dev/pts/0
lrwx------ 1 michas users 1 18. Jan 16:52 2 -> /dev/pts/0
lr-x------ 1 michas users 1 18. Jan 16:52 3 -> /proc/2903/fd

파일 설명자 0(STDIN이라고도 함)은 기본적으로 읽기, fd 1(STDOUT이라고도 함)은 기본적으로 쓰기, fd 2(STDERR이라고도 함)는 기본적으로 오류 메시지를 나타냅니다. (이 예에서는 ls실제로 디렉토리를 읽는 데 fd 3이 사용되었습니다 .)

콘텐츠를 리디렉션하면 다음과 같이 표시될 수 있습니다.

$ ls -l /proc/self/fd 2>/dev/null </dev/zero 99<>/dev/random |cat
insgesamt 0
lr-x------ 1 michas users 1 18. Jan 16:57 0 -> /dev/zero
l-wx------ 1 michas users 1 18. Jan 16:57 1 -> pipe:[28468]
l-wx------ 1 michas users 1 18. Jan 16:57 2 -> /dev/null
lr-x------ 1 michas users 1 18. Jan 16:57 3 -> /proc/3000/fd
lrwx------ 1 michas users 1 18. Jan 16:57 99 -> /dev/random

이제 기본 설명자는 더 이상 터미널을 가리키지 않고 해당 리디렉션을 가리킵니다. (보시다시피, 새로운 fd를 생성할 수도 있습니다.)


또 다른 예를 들어보겠습니다 <>:

echo -e 'line 1\nline 2\nline 3' > foo # create a new file with three lines
( # with that file redirected to fd 5
  read <&5            # read the first line
  echo "xxxxxx">&5    # override the second line
  cat <&5             # output the remaining line
) 5<>foo  # this is the actual redirection

이와 같은 작업을 수행할 수 있지만 그럴 필요는 거의 없습니다.

관련 정보