<>
– 몇 달 전에 어떤 웹사이트에서 이 연산자를 봤는데 무슨 뜻인지 기억이 안 나요. 어쩌면 내가 틀렸을 수도 있고 ksh에 없을 수도 있습니다 <>
.
a<&b
a
- 이 연산자가 입력 스트림을 출력 스트림과 병합한다는 것을 알고 있습니다 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
이와 같은 작업을 수행할 수 있지만 그럴 필요는 거의 없습니다.