Ⅰ. cat
$ cat file
: 파일을 Stdout으로 출력
- 파일을 지정하지 않을 경우 Stdin을 받음
jsg@jsg-ubuntu:~$ cat testdir/hello.txt
Hello World
jsg@jsg-ubuntu:~$ cat
writing input
writing input
Ⅱ. tee
$ tee file
: stdin을 stdout 과 파일에 연결
jsg@jsg-ubuntu:~$ echo tee demonstration | tee redirection.txt
tee demonstration
jsg@jsg-ubuntu:~$ cat redirection.txt
tee demonstration
Ⅲ. Redirection
1. A > File
- A의 stdout을 file로 연결
- A 가 null command(":", 생략 가능) File이 clear됨
jsg@jsg-ubuntu:~$ (date && errorcommand) > redirection.txt
errorcommand: 명령을 찾을 수 없습니다
jsg@jsg-ubuntu:~$ cat redirection.txt
2020. 12. 18. (금) 18:33:54 KST
jsg@jsg-ubuntu:~$ : > redirection.txt
jsg@jsg-ubuntu:~$ cat redirection.txt
jsg@jsg-ubuntu:~$
2. A n> File
jsg@jsg-ubuntu:~$ (date && errorcommand) 2> redirection.txt
2020. 12. 18. (금) 18:35:26 KST
jsg@jsg-ubuntu:~$ cat redirection.txt
errorcommand: 명령을 찾을 수 없습니다
3. A &> File
- A의 stdout과 stderr를 File로 연결
jsg@jsg-ubuntu:~$ (date && errorcommand) &> redirection.txt
jsg@jsg-ubuntu:~$ cat redirection.txt
2020. 12. 18. (금) 18:38:00 KST
errorcommand: 명령을 찾을 수 없습니다
4. A n>&m
jsg@jsg-ubuntu:~$ cat test.sh
#! bin/bash
echo Error >&2
jsg@jsg-ubuntu:~$ bash test.sh > /dev/null
Error
5. A >> File
jsg@jsg-ubuntu:~$ echo "Appended text" >> redirection.txt
jsg@jsg-ubuntu:~$ cat redirection.txt
2020. 12. 18. (금) 18:38:00 KST
errorcommand: 명령을 찾을 수 없습니다
Appended text
6. A < File
jsg@jsg-ubuntu:~$ cat < redirection.txt
2020. 12. 18. (금) 19:09:42 KST
7. A <$n
6. A << HERE
- 다음 HERE가 나올때까지 모든 input을 A로 전달
jsg@jsg-ubuntu:~$ cat << HERE
sentences
more sentences
HERE
sentences
more sentences
4. A <<< text
jsg@jsg-ubuntu:~$ cat <<< redirection.txt
redirection.txt
Ⅵ. Pipe
1. A | B
- A의 출력 -> B의 입력으로 연결됨
- A가 종료되야지 B로 연결
jsg@jsg-ubuntu:~$ ls | wc -l # ls 에서 받은 출력값을 입력값으로 받아 count함
11
2. A > >(B)
- A | B 와 비슷하지만 A가 종료상태가 아니여도 잘만 돌아감
jsg@jsg-ubuntu:~$ cat test.sh
#! /bin/bash
while :
do
sleep 5
echo Good $(date)
echo Err $(date) >&2
done
jsg@jsg-ubuntu:~$ cat log.sh
#! /bin/bash
while read line
do
if [ $1 == ERR ]
then
echo $line >> err.txt
else
echo $line >> log.txt
fi
done
jsg@jsg-ubuntu:~$ ./test.sh > >(./log.sh NOR) 2> >(./log.sh ERR) &
[1] 29207
jsg@jsg-ubuntu:~$ cat log.txt
Good 2020. 12. 18. (금) 21:10:00 KST
jsg@jsg-ubuntu:~$ cat err.txt
Err 2020. 12. 18. (금) 21:10:00 KST
Err 2020. 12. 18. (금) 21:10:05 KST
4. named pipe
- 파일 형태로 볼 수 있음
$ mkfifo pipe_name
로 생성
# terminal 1
jsg@jsg-ubuntu:~$ mkfifo myfifo
jsg@jsg-ubuntu:~$ ls -l myfifo
prw-rw-r-- 1 jsg jsg 0 Dec 10 20:45 myfifo
jsg@jsg-ubuntu:~$ cat testdir/hello.txt > myfifo
# terminal 2
jsg@jsg-ubuntu:~$ cat myfifo
Hello World
Ⅴ. 잡지식
1. noclobber
set -o noclobber
로 덮어쓰기를 방지할 수 있다
>|
으로 force 가능
jsg@jsg-ubuntu:~$ set -o noclobber
jsg@jsg-ubuntu:~$ echo Rewrite > redirection.txt
bash: redirection.txt: cannot overwrite existing file
jsg@jsg-ubuntu:~$ echo Rewrite >| redirection.txt
jsg@jsg-ubuntu:~$ cat redirection.txt
Rewrite
2. code block
jsg@jsg-ubuntu:~$ {
echo Date is ....
date
} > redirection.txt
jsg@jsg-ubuntu:~$ cat redirection.txt
Date is ....
2020. 12. 18. (금) 21:30:09 KST