링크 ux 에서 입 출력 방향 변경
리 눅 스 의 기본 입력 은 키보드 이 고 출력 은 모니터 입 니 다.너 는 이 설정 들 을 재정 비 로 바 꿀 수 있다.예 를 들 어 wc 명령 을 사용 할 때 문자 수 를 수 동 으로 입력 해 야 하 는데 방향 을 바 꾼 후에 이미 쓴 파일 을 '<' 로 이 명령 을 가리 키 면 이 파일 의 문자 수 등 을 직접 통계 할 수 있 습 니 다.출력 도 마찬가지 입 니 다. 화면 출력 을 파일 로 바 꾸 고 파일 로 결 과 를 볼 수 있 습 니 다.리 셋 조작 자 는 명령 입력 과 출력 데이터 흐름 을 기본 위치 에서 다른 위치 로 리 셋 할 수 있 으 며, 입력 이나 출력 데이터 흐름 의 위 치 를 핸들 이 라 고 부른다.흔히 볼 수 있 는 문형 은 세 가지 가 있 는데 물론 문형 은 스스로 확장 할 수 있 고 일반적인 OS 는 모두 비슷 한 기능 을 제공한다.핸들
stdIN 0 키보드 입력
알림 창 에 stdOUT 1 출력 정보
stdERR 2 알림 창 에 오류 정 보 를 출력 합 니 다.
기본 < 리 셋 입력 조작 자 는 0 이 고, 기본 > 리 셋 출력 조작 자 는 1 입 니 다.< 또는 > 조작 자 를 입력 한 후 데이터 의 읽 기와 쓰기 위 치 를 지정 해 야 합 니 다. 파일 이름 이나 다른 기 존 구문 일 수 있 습 니 다.
기 존 핸들 로 재 설정 하려 면 & 문 자 를 사용 하 십시오. 뒤쪽 으로 재 설정 할 핸들 번호 (즉 & 핸들 번호) 를 연결 하 십시오.
예 를 들 어 다음 명령 은 핸들 2 (즉 stdERR) 를 핸들 1 (즉 stdOUT): 2 > & 1 로 바 꿀 수 있 습 니 다.
다음 표 는 입력 과 출력 데이터 흐름 을 바 꿀 수 있 는 조작 자 를 보 여 줍 니 다.
리 눅 스 리 셋 연산 자 기능 설명
> 명령 프롬프트 나 핸들 대신 명령 출력 을 파일 이나 장치 에 기록 합 니 다.
< 키보드 나 핸들 대신 파일 에서 명령 입력
>> 파일 에 있 는 정 보 를 삭제 하지 않 고 명령 출력 을 파일 끝 에 추가 합 니 다.
> & 한 핸들 의 출력 을 다른 핸들 의 입력 에 기록 합 니 다.
< & 한 핸들 에서 입력 을 읽 고 다른 핸들 출력 에 기록 합 니 다.
| 한 명령 에서 출력 을 읽 고 다른 명령 의 입력 에 기록 합 니 다.파이프 조작 부호 라 고도 부른다
이제 우 리 는 고 개 를 돌려 위의 그 문 구 를 보 았 다. my sh > my log. txt 2 > & 1 을 보면 알 수 있다.
> my log. txt 는 표준 출력 을 my log. txt 로 바 꾸 고 my sh 1 > my log. txt 와 같은 값 으로 바 꾸 는 것 을 의미 합 니 다.
2 > & 1 은 오류 출력 을 핸들 1 표준 출력 으로 재 설정 한 다 는 뜻 입 니 다.종합해 보면 my sh 명령 을 실행 하 는 과정 에서 발생 하 는 표준 출력 과 오류 출력 은 모두 my log. txt 로 재 설정 된다.
방향 을 바 꾸 는 기능 이 매우 강하 고 관심 이 있 는 사람 은 다양한 조합 을 시도 해 볼 수 있 습 니 다. 앞 뒤 위치 가 바 뀌 면 어떤 결과 가 나 올 지 볼 수 있 습 니 다.
어떤 때 는 표준 출력 이나 오류 출력 을 기록 하고 싶 지 않 을 수도 있 습 니 다. my sh > null 2 > null 또는 my sh >/dev/null 2 >/dev/null 을 사용 할 수 있 습 니 다.
I/O 리 셋 상세 설명
1. 기본 개념 (이것 은 뒤의 지식 을 이해 하 는 전제 이 니 반드시 이해 하 세 요)
a. I/O 재 설정 은 보통 FD 와 관련 이 있 고 셸 의 FD 는 보통 10 개, 즉 0 ~ 9 이다.
b. 상용 FD 는 3 개 로 0 (stdin, 표준 입력), 1 (stdout, 표준 출력), 2 (stderr, 표준 오류 출력) 이 고 기본 값 은 키보드, monitor, monitor 와 관련 이 있 습 니 다.
c. < 로 읽 은 데이터 채널 (stdin) 을 변경 하여 지정 한 파일 에서 읽 습 니 다.
d. > 로 보 낸 데이터 채널 (stdout, stderr) 을 변경 하여 지정 한 파일 로 출력 합 니 다.
e, 0 은 < 의 기본 값 이기 때문에 < 0 < 과 같 습 니 다.마찬가지 로 > 1 > 과 같다.
f. IO 재 설정 에서 stdout 과 stderr 의 파이프 가 먼저 준비 되 어야 stdin 에서 자 료 를 읽 을 수 있 습 니 다.
g. 파이프 "|"(pipe line): 이전 명령 의 stdout 이 다음 명령 을 받 은 stdin;
h. tee 명령 은 원래 의 I/O 에 영향 을 주지 않 는 상황 에서 stdout 을 파일 로 복사 하 는 것 입 니 다.
i. bash (ksh) 가 명령 을 수행 하 는 과정: 분석 명령 - 변수 값 구하 기 - 명령 대체 (` 와 $() - 재 설정 - 어댑터 전개 - 경로 확인 - 명령 실행;
j. () command group 을 sub - shell 에 두 고 실행 합 니 다. nested sub - shell 이 라 고도 부 릅 니 다. 아주 중요 한 특징 은 부모 셸 의 Standard input, output, and error plus any other open file descriptors 를 계승 하 는 것 입 니 다.
k, exec 명령: 현재 셸 을 대체 하고 셸 을 다시 시작 하 는 데 자주 사 용 됩 니 다. 다시 말 하면 하위 셸 을 시작 하지 않 았 습 니 다.이 명령 을 사용 하면 기 존 환경 이 삭 제 됩 니 다.exec 가 파일 설명 자 를 조작 할 때 도 이때 만 exec 는 현재 셸 환경 을 덮어 쓰 지 않 습 니 다.
2. 기본 IO
cmd > file 은 stdout 을 file 파일 로 재 설정 합 니 다.
cmd >> file 은 stdout 을 file 파일 로 재 설정 합 니 다 (추가).
cmd 1 > fiel 은 stdout 을 file 파일 로 재 설정 합 니 다.
cmd > file 2 > & 1 stdout 과 stderr 를 함께 file 파일 로 재 설정 합 니 다.
cmd 2 > file 은 stderr 를 file 파일 로 재 설정 합 니 다.
cmd 2 >> file 은 stderr 를 file 파일 로 재 설정 합 니 다 (추가).
cmd >> file 2 > & 1 stderr 와 stderr 를 함께 file 파일 로 재 설정 (추가);
cmd < file > file 2 cmd 명령 은 file 파일 을 stdin 으로 하고 file 2 파일 을 stdout 으로 합 니 다.
cat < > file 읽 기와 쓰기 로 file 열기;
cmd < file cmd 명령 은 file 파일 을 stdin 으로 합 니 다.
cmd << delimiter Here document, stdin 에서 읽 어 들 여 delimiter 분계 부 를 만 날 때 까지.
3. 진급 IO
> & n 시스템 호출 dup (2) 파일 설명자 n 을 복사 하고 결 과 를 표준 출력 으로 사용 합 니 다.
< & n 표준 입력 복사 파일 설명자 n;
< & - 표준 입력 닫 기 (키보드);
> & - 표준 출력 닫 기;
n < & - n 번 입력 을 닫 는 것 을 표시 합 니 다.
n > & - n 번 출력 을 닫 는 것 을 표시 합 니 다.
위 와 같은 모든 형식 은 하나의 숫자 를 선도 할 수 있 습 니 다. 이때 만들어 진 파일 설명 자 는 이 숫자 가 부족 한 0 이나 1 이 아 닌 이 숫자 로 지정 합 니 다.예:
2 > file 명령 을 실행 하고 오류 출력 (파일 설명자 2) 을 file 로 지정 합 니 다.
2 > & 1 명령 을 실행 하고 표준 출력 과 출력 을 합 칩 니 다.(엄 밀 히 말 하면 파일 설명자 1 을 복사 하여 파일 설명자 2 를 만 드 는 것 이지 만 효 과 는 보통 두 개의 흐름 을 합 친 것 입 니 다.)
우 리 는 2 > & 1 에 대해 상세 하 게 설명 한다. 2 > & 1 즉 FD2 = FD1 이다. 여 기 는 FD2 의 값 이 FD1 의 값 과 같다 는 것 이 아니다. 왜냐하면 > 보 낸 데이터 채널 을 바 꾸 는 것 이다. 즉, FD2 의 '데이터 출력 채널' 을 FD1 의 '데이터 출력 채널' 로 바 꾸 는 것 이다.이것 만 있 으 면 이 변 화 는 아무런 작용 이 없 는 것 같 습 니 다. 왜냐하면 FD2 의 기본 출력 과 FD1 의 기본 출력 은 원래 Monitor 이기 때 문 입 니 다!그러나 FD1 이 다른 파일, 심지어 다른 FD 일 때 이것 은 특별한 용도 가 있다.집안일 은 반드시 이 점 을 이해 해 주 십시오.
exec 0 exec 1 > outfilename\# 파일 outfilename 을 stdout 으로 엽 니 다.
exec 2 > errfilename\# 파일 errfilename 을 stderr 로 엽 니 다.
exec 0 < & -\# FD0 을 닫 습 니 다.
exec 1 > & -\# FD1 을 닫 습 니 다.
exec 5 > & -\# FD5 를 닫 습 니 다.
1 COMMAND_OUTPUT >
2 # stdout .
3 # , .
4
5 ls -lR > dir-tree.list
6 # .
7
8 : > filename
9 # > "filename" 0 .
10 # , 0 ( 'touch' ).
11 # : , .
12
13 > filename
14 # > "filename" 0 .
15 # , 0 ( 'touch' ).
16 # ( ": >" , shell .)
17
18 COMMAND_OUTPUT >>
19 # stdout .
20 # , , , .
21
22
23 # ( ):
24 # --------------------------------------------------------------------
25
26 1>filename
27 # stdout "filename".
28 1>>filename
29 # stdout "filename".
30 2>filename
31 # stderr "filename".
32 2>>filename
33 # stderr "filename".
34 &>filename
35 # stdout stderr "filename".
36
37 #==============================================================================
38 # stdout, .
39 LOGFILE=script.log
40
41 echo "This statement is sent to the log file, \"$LOGFILE\"." 1>$LOGFILE
42 echo "This statement is appended to \"$LOGFILE\"." 1>>$LOGFILE
43 echo "This statement is also appended to \"$LOGFILE\"." 1>>$LOGFILE
44 echo "This statement is echoed to stdout, and will not appear in \"$LOGFILE\"."
45 # , "reset".
46
47
48
49 # stderr, .
50 ERRORFILE=script.errors
51
52 bad_command1 2>$ERRORFILE # $ERRORFILE .
53 bad_command2 2>>$ERRORFILE # $ERRORFILE .
54 bad_command3 # echo stderr,
55 #+ $ERRORFILE .
56 # , "reset".
57 #==============================================================================
58
59
60
61 2>&1
62 # stderr stdout.
63 # stdout , .
64
65 i>&j
66 # i j.
67 # i j .
68
69 >&j
70 # , 1(stdout) j.
71 # stdout j .
72
73 0< FILENAME
74 < FILENAME
75 # .
76 # ">" , .
77 #
78 # grep search-word <filename
79
80
81 [j]<>filename
82 # "filename", "filename" , "j" .
83 # "filename" , .
84 # "j" , fd 0, stdin.
85 #
86 # .
87 echo 1234567890 > File # "File".
88 exec 3<> File # "File" fd 3.
89 read -n 4 <&3 # 4 .
90 echo -n . >&3 # .
91 exec 3>&- # fd 3.
92 cat File # ==> 1234.67890
93 # .
94
95
96
97 |
98 # .
99 # .
100 # ">" , .
101 # , , .
102 cat *.txt | sort | uniq > result-file
103 # .txt , ,
104 # "result-file" .
입 출력 을 (또는) 파이프 의 여러 인 스 턴 스 와 결합 하여 한 줄 에 쓸 수 있 습 니 다.
1 command < input-file > output-file
2
3 command1 | command2 | command3 > output-file
여러 출력 흐름 을 파일 로 다시 설정 할 수 있 습 니 다.
1 ls -yz >> command.log 2>&1
2 # "yz" "command.log" .
3 # stderr ,
4 #+ .
5
6 # , .
7 ls -yz 2>&1 >> command.log
8 # , .
9
10 # stdout stderr ,
11 #+ .
exec < filename 명령 은 stdin 을 파일 로 재 설정 합 니 다. 이 말 부터 뒤쪽 입력 은 표준 입력 이 아 닌 이 파일 에서 나 옵 니 다. (보통 키보드 입력) 줄 별로 파일 을 읽 는 방법 을 제공 하고 사용 할 수 있 습 니 다.
sed 와/또는
awk 는 모든 줄 을 분석 합 니 다.
exec 리 셋 표준 입력 사용
1 #!/bin/bash
2 # 'exec' .
3
4
5 exec 6<&0 # #6 stdin .
6 # stdin.
7
8 exec < data-file # stdin "data-file" .
9
10 read a1 # "data-file" .
11 read a2 # "data-file" .
12
13 echo
14 echo "Following lines read from file."
15 echo "-------------------------------"
16 echo $a1
17 echo $a2
18
19 echo; echo; echo
20
21 exec 0<&6 6<&-
22 # stdin fd #6 , stdin #6 ,
23 #+ fd #6 ( 6<&- ), .
24 #
25 # <&6 6<&- .
26
27 echo -n "Enter data "
28 read b1 # "read" , stdin .
29 echo "Input read from stdin."
30 echo "----------------------"
31 echo "b1 = $b1"
32
33 echo
34
35 exit 0
exec 를 사용 하여 stdout 로 방향 을 바 꿉 니 다.
1 #!/bin/bash
2 # reassign-stdout.sh
3
4 LOGFILE=logfile.txt
5
6 exec 6>&1 # fd #6 stdout .
7 # stdout.
8
9 exec > $LOGFILE # stdout "logfile.txt" .
10
11 # ----------------------------------------------------------- #
12 # $LOGFILE.
13
14 echo -n "Logfile: "
15 date
16 echo "-------------------------------------"
17 echo
18
19 echo "Output of \"ls -al\" command"
20 echo
21 ls -al
22 echo; echo
23 echo "Output of \"df\" command"
24 echo
25 df
26
27 # ----------------------------------------------------------- #
28
29 exec 1>&6 6>&- # stdout, #6.
30
31 echo
32 echo "== stdout now restored to default == "
33 echo
34 ls -al
35 echo
36
37 exit 0
exec 를 사용 하여 같은 스 크 립 트 에서 stdin 과 stdout 으로 다시 설정 합 니 다.
1 #!/bin/bash
2 # upperconv.sh
3 # .
4
5 E_FILE_ACCESS=70
6 E_WRONG_ARGS=71
7
8 if [ ! -r "$1" ] # ?
9 then
10 echo "Can't read from input file!"
11 echo "Usage: $0 input-file output-file"
12 exit $E_FILE_ACCESS
13 fi # ($1)
14 #+ ( ?).
15
16 if [ -z "$2" ]
17 then
18 echo "Need to specify output file."
19 echo "Usage: $0 input-file output-file"
20 exit $E_WRONG_ARGS
21 fi
22
23
24 exec 4<&0
25 exec < $1 # .
26
27 exec 7>&1
28 exec > $2 # .
29 # ( ?).
30
31 # -----------------------------------------------
32 cat - | tr a-z A-Z # .
33 # ^^^^^ # stdin .Reads from stdin.
34 # ^^^^^^^^^^ # stdout .
35 # , stdin stdout .
36 # -----------------------------------------------
37
38 exec 1>&7 7>&- # stout.
39 exec 0<&4 4<&- # stdin.
40
41 # , stdout .
42 echo "File \"$1\" written to \"$2\" as uppercase conversion."
43
44 exit 0
I/O 재 설정 은 무 서운 하위 셸 에서 변수 문 제 를 접근 할 수 없 는 방법 입 니 다.
하위 셸 피하 기
1 #!/bin/bash
2 # avoid-subshell.sh
3 # Matthew Walker .
4
5 Lines=0
6
7 echo
8
9 cat myfile.txt | while read line; # ( : shell)
10 do {
11 echo $line
12 (( Lines++ )); #
13 #+ .
14 # shell .
15 }
16 done
17
18 echo "Number of lines read = $Lines" # 0
19 # !
20
21 echo "------------------------"
22
23
24 exec 3<> myfile.txt
25 while read line <&3
26 do {
27 echo "$line"
28 (( Lines++ )); #
29 #+ .
30 # shell, .
31 }
32 done
33 exec 3>&-
34
35 echo "Number of lines read = $Lines" # 8
36
37 echo
38
39 exit 0
40
41 # , .
42
43 $ cat myfile.txt
44
45 Line 1.
46 Line 2.
47 Line 3.
48 Line 4.
49 Line 5.
50 Line 6.
51 Line 7.
52 Line 8.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.