๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ผ์ƒ

#008. ๋ฏธ๋‹ˆ์…ธ์˜ ๋ณ€ํ˜•

๐ŸŒฑ  ๋ฏธ๋‹ˆ์…ธ์˜ ๋ณ€ํ˜• (2021.08.05)

 ์˜ค๋Š˜์€! ์ผ์ƒ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ํ”„๋กœ์ ํŠธ "๋ฏธ๋‹ˆ์…ธ(minishell)"์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ž…์žฅ์ •๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ์ •๋ฆฌํ•  ๋‚ด์šฉ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํ›„์† ํŽธ์ด ์˜ˆ์ •๋˜์–ด์žˆ๋‹ค.
- #007. ๋ฏธ๋‹ˆ์…ธ์˜ ๊ธฐ๋ณธ ์ค‘ -


- ๋ง ๊ทธ๋Œ€๋กœ "ํ›„์†ํŽธ"์ด๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ•ด์™”๊ณ  ์ง€๊ธˆ๋„ ์—ญ์‹œ ํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋งŒ๋“ค์–ด๋‚ธ ํ”„๋กœ๊ทธ๋žจ์ด ์˜๋„๋Œ€๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ๋งŒ ์ž‘๋™ํ•ด์ค€๋‹ค๋ฉด, ๋˜๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ๋งŒ ์‚ฌ์šฉํ•ด์ค€๋‹ค๋ฉด์•ผ.. ์ œ์ž‘์ž๋กœ์„œ ์–ผ๋งˆ๋‚˜ ๊ธฐ์˜๊ณ  ๋ณด๋žŒ์ฐฌ ์ผ์ด๊ฒ ๋ƒ๋งˆ๋Š”.. ๊ทธ๋ ‡์ง€ ์•Š์€๊ฒŒ ์ธ์ƒ์ด๊ณ  ์‹ค์ „์ด๋‹ค. ์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ์‚ฌ์šฉ์ด๋‚˜ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ชจ๋“  ๋™์ž‘์— ๋Œ€ํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ˜์‘์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๊ฐœ์„ ํ•ด๊ฐ€๋Š” ๊ณผ์ •์€ ๊ฐœ๋ฐœ์ง๊ตฐ์ด ์ „๋ฌธ์„ฑ์„ ๊ฐ€์ง€๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค. 

 

 

๐ŸŒฑ ์˜ค๋Š˜์˜ ์ด์Šˆ 

- ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™ํ™•์ธ ๋ฐ ํ‰๊ฐ€ ๋””ํŽœ์Šค ์ค€๋น„.

- ํ™•์ธ ์ค‘ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋“ค ์ˆ˜์ •.

- ํ™•์ธ๊ณผ ์ˆ˜์ •์™„๋ฃŒ ํ›„ ์ž‘์„ฑ๊ทœ์น™์„ ์œ„ํ•œ ๊ตฌ์กฐ๋ณ€๊ฒฝ.

- ์ฝ”๋กœ๋‚˜ ํ™•์ง„์ž 1700๋ช…, ๋ฉ€์–ด์ ธ ๊ฐ€๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ณต๊ท€ ๊ฐ€๋Šฅ์„ฑ.

 

 

๐ŸŒฑ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ (projects in progress)

- minishell (with sungclee)๐Ÿ“‹

- inception ๐Ÿ“‹

 

 

๐ŸŒฑ ํ”„๋กœ์ ํŠธ (minishell)

๐Ÿ“‹ bashํ™˜๊ฒฝ๊ณผ minishellํ™˜๊ฒฝ์˜ ์ž‘๋™๋น„๊ต ํ›„ํŽธ

- ์˜๋ฏธ ์—†๋Š” ์ผ€์ด์Šค์™€ ์ž˜๋ชป๋œ ๋ช…๋ น์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์ด ์–ด๋–ค ๋ฐ˜์‘์„ ๋ณด์ด๋Š”์ง€ ์ •๋ฆฌํ•˜๊ณ  ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•œ๋‹ค.

 

๐Ÿ“‹ ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ์ฒ˜๋ฆฌ๋ฐฉ์‹.

- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ˜์‘์„ ์ฃผ์ œ๋ณ„๋กœ ํ™•์ธํ•ด๋ณด์ž.

 

๐Ÿ“‹ case01 ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ช…๋ น์–ด.

- ํŒŒ์ดํ”„๋ผ์ธ ๋’ค์—์„œ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ช…๋ น์ผ ๋•Œ ์ถœ๋ ฅ์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

- ํŒŒ์ดํ”„๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์—์„œ ๋ช…๋ น์–ด๊ฐ€ ์œ ํšจํ•œ์ง€๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ์‹์ด ์ฐจ์ด๋ฅผ ์œ ๋ฐœํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

- ์œ ํšจํ•œ ๋ช…๋ น์— ๋Œ€ํ•ด์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ  ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ๋ณธ๊ธฐ๋Šฅ ๊ฒ€์ฆ์„ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

# ๋ช…๋ น์ด ์œ ํšจํ•˜์ง€ ์•Š์€๊ฒฝ์šฐ์—์„œ์˜ ์ž‘๋™ (bash)
bash-3.2$ cat > test.txt                 # ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ž‘์„ฑํ•ด์ค€๋‹ค
test!!!                                  # ๋‚ด์šฉ์„ ์ž…๋ ฅํ•œ๋‹ค
bash-3.2$ invalid_cmd < test.txt         # ์œ ํšจํ•œํŒŒ์ผ test.txt์„ ์ž…๋ ฅ์œผ๋กœ ํ•˜์—ฌ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
bash: invalid_cmd: command not found     # 'invalid_cmd'๋ผ๋Š” ๋ช…๋ น์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

# ๋ช…๋ น์ด ์œ ํšจํ•˜์ง€ ์•Š์€๊ฒฝ์šฐ์—์„œ์˜ ์ž‘๋™ (minishell)   
minishell-1.0 %% invalid_cmd < test.txt     # ์œ„์—์„œ ์ž‘์„ฑํ•œ ์œ ํšจํŒŒ์ผ์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์‹คํ—˜์„ ์ง„ํ–‰ํ•œ๋‹ค.
minishell: invalid_cmd: command not found   # 'invalid_cmd'๋ผ๋Š” ๋ช…๋ น์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

# ์ •์ƒ์ ์ธ ๋ช…๋ น x ์œ ํšจํ•˜์ง€์•Š์€ ๋ช…๋ น (bash)
bash-3.2$ cat < test.txt | invalid_cmd > result.txt  # ์ž…๋ ฅ์„๋ฐ›์•„ ์ƒˆ๋กœ์šด ํ…์ŠคํŠธํŒŒ์ผ์„ ์ƒ์„ฑ.
bash: invalid_cmd: command not found                 # ๋ช…๋ น์„ ์ฐพ์„์ˆ˜์—†๋‹ค๋Š” ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋ฐœ์ƒ
bash-3.2$ ls result.txt                              # ์ƒ์„ฑํŒŒ์ผ ํ™•์ธ
result.txt                                           # ๋ช…๋ น์ด ์œ ํšจํ•˜์ง€์•Š์•˜์ง€๋งŒ, ํŒŒ์ผ์€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.
bash-3.2$ cat result.txt                             # ๋‚ด์šฉํ™•์ธ
bash-3.2$                                            # ์•„๋ฌด๋Ÿฐ ๋‚ด์šฉ์ด ๋‹ด๊ฒจ์žˆ์ง€์•Š๋‹ค.
bash-3.2$ rm result.txt                              # ๋‹ค์Œ์‹คํ—˜์„์œ„ํ•ด ํŒŒ์ผ์‚ญ์ œ

# ์ •์ƒ์ ์ธ ๋ช…๋ น x ์œ ํšจํ•˜์ง€์•Š์€ ๋ช…๋ น (minishell)
minishell-1.0 %% cat < test.txt | invalid_cmd > result.txt # ์ƒˆ๋กœ์šด ํ…์ŠคํŠธํŒŒ์ผ์„ ์ƒ์„ฑ.
minishell: invalid_cmd: command not found                  # bash์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
minishell-1.0 %% ls result.txt                             # ํŒŒ์ผ์ƒ์„ฑ์—ฌ๋ถ€ํ™•์ธ
ls: result.txt: No such file or directory                  # ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค. ์ฐจ์ด์ ๋ฐœ์ƒ.

 

๐Ÿ“‹ case02 ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ž.

- ๋ฆฌ๋””๋ ‰์…˜๊ณผ ๋ช…๋ น, ํŒŒ์ดํ”„๋ผ์ธ์˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ž์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ํ™˜๊ฒฝ์˜ ๋ฐ˜์‘์„ ํ™•์ธํ•˜์˜€๋‹ค.

- ํŒŒ์ดํ”„๋ผ์ธ ์ดํ›„ ์•„๋ฌด๋Ÿฐ ๋ช…๋ น์ด ์˜ค์ง€ ์•Š๋Š” ๊ฒƒ์— ๋Œ€ํ•ด. segfault ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด์ „๊นŒ์ง€์˜ ์‹คํ—˜์— ๋Œ€ํ•œ ๋ฆญ์„ ๊ฒ€์‚ฌํ•œ ํ›„ ํ™•์ธํ•˜์˜€๋‹ค.

- ๋ฌธ์ œํ•ด๊ฒฐ์€ ๋ณ„๋„์˜ ์ฝ”๋“œ๋ธ”๋Ÿญ์„ ์ƒ์„ฑํ•ด์„œ ํ•ด๊ฒฐ ๊ณผ์ •์— ๋Œ€ํ•ด ๋‹ค๋ฃฐ ๊ณ„ํš์ด๋‹ค.

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘11 (bash)
bash-3.2$ cat < ์—†๋Š”ํŒŒ์ผ.txt                   # ์—†๋Š”ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋ ค๊ณ ํ•œ๋‹ค.์ด๋ฆ„๊ทธ๋Œ€๋กœ ์กด์žฌํ•˜์ง€์•Š์Œ.
bash: ์—†๋Š”ํŒŒ์ผ.txt: No such file or directory  # ํ•ด๋‹นํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๊ณ , ์ƒ์„ฑํ•˜์ง€๋„ ์•Š๋Š”๋‹ค.

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘11 (minishell)
minishell-1.0 %% cat < ์—†๋Š”ํŒŒ์ผ.txt                 # bash์™€ ๊ฐ™์€์กฐ๊ฑด
minishell: ์—†๋Š”ํŒŒ์ผ.txt: No such file or directory  # ํ•ด๋‹นํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๊ณ , ์ƒ์„ฑํ•˜์ง€๋„ ์•Š๋Š”๋‹ค.

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘22 (bash)
bash-3.2$ wc <                                      # ์ž…๋ ฅ์— ์•„๋ฌด๊ฒƒ๋„ ์ฃผ์ง€์•Š๋Š”๋‹ค
bash: syntax error near unexpected token `newline'' # ํ† ํฐ๊ด€๋ จ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅ
bash-3.2$ wc <<                                     # ํžˆ์–ด๋„ํ๋จผํŠธ์— ์•„๋ฌด๊ฒƒ๋„ ์ฃผ์ง€์•Š๋Š”๋‹ค
bash: syntax error near unexpected token `newline'' # ํ† ํฐ๊ด€๋ จ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅ
bash-3.2$ wc >                                      # ๋ฎ์–ด์“ฐ๊ธฐ์ถœ๋ ฅ์— ์•„๋ฌด๊ฒƒ๋„ ์ฃผ์ง€์•Š๋Š”๋‹ค
bash: syntax error near unexpected token `newline'' # ํ† ํฐ์—๋Ÿฌ, ํŒŒ์ผ์€ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค
bash-3.2$ wc >>                                     # ์ด์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์— ์•„๋ฌด๊ฒƒ๋„ ์ฃผ์ง€์•Š๋Š”๋‹ค
bash: syntax error near unexpected token `newline'' # ํ† ํฐ์—๋Ÿฌ, ํŒŒ์ผ์€ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘22 (minishell)
minishell-1.0 %% wc <                   # ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ†ตํ•ด ์ž„์‹œ๋กœ ์ฝ”๋“œ๋‚ด ์—๋Ÿฌ๋ฐœ์ƒ์œ„์น˜๋ฅผ ํ™•์ธ
minishell : syntax error near unexpected token `newline'' # ํ† ํฐ์—๋Ÿฌ (..๐Ÿ”ฅ)
minishell-1.0 %% wc <<
minishell : syntax error near unexpected token `newline'' # ํ† ํฐ์—๋Ÿฌ (..๐Ÿต)
minishell-1.0 %% wc >
minishell : syntax error near unexpected token `newline'' # ํ† ํฐ์—๋Ÿฌ (..๐ŸŒˆ)
minishell-1.0 %% wc >>
minishell : syntax error near unexpected token `newline'' # ํ† ํฐ์—๋Ÿฌ (..๐ŸŒˆ)
minishell-1.0 %%                                          # ์–ด๋– ํ•œํŒŒ์ผ๋„ ์ƒ์„ฑํ•˜์ง€์•Š์•˜๋‹ค.

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘33 (bash)
bash-3.2$ cat test.txt -e                  # ๋ช…๋ น์— ๋Œ€ํ•œ ์˜ต์…˜์€ ๋ช…๋ น์–ด ๋‹ค์Œ์— ์˜ฌ๋•Œ๋งŒ ์ธ์‹.
test!!!                                    # ํ•˜์ง€๋งŒ ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์˜ต์…˜์„ ๋ฐ˜์˜ํ•˜์ง€์•Š๊ณ  ์ถœ๋ ฅ.
cat: -e: No such file or directory         # ์˜ต์…˜์„ ์ฝ์–ด๋“œ๋ฆด ํŒŒ์ผ๋กœ ์ธ์‹.

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘33 (minishell)
minishell-1.0 %% cat test.txt -e           # ๋ช…๋ น์— ๋Œ€ํ•œ ์˜ต์…˜์€ ๋ช…๋ น์–ด ๋‹ค์Œ์— ์˜ฌ๋•Œ๋งŒ ์ธ์‹.
test!!!                                    # ํ•˜์ง€๋งŒ ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์˜ต์…˜์„ ๋ฐ˜์˜ํ•˜์ง€์•Š๊ณ  ์ถœ๋ ฅ.
cat: -e: No such file or directory         # ์˜ต์…˜์„ ์ฝ์–ด๋“œ๋ฆด ํŒŒ์ผ๋กœ ์ธ์‹.

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘44 (bash)
bash-3.2$ wc < test.txt |                    # ํŒŒ์ดํ”„๋ผ์ธ๋’ค์— ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€์•Š๋Š”๋‹ค๋ฉด
>                                            # bash๋Š” ์ถ”๊ฐ€๋กœ ์ž…๋ ฅ์„ ์š”์ฒญํ•œ๋‹ค.
> bash: syntax error: unexpected end of file # ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•ด์ฃผ์ง€์•Š์„๊ฒฝ์šฐ์—” ๊ด€๋ จ๋œ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ
bash-3.2$ 

# ์œ ํšจํ•˜์ง€์•Š์€ ์ธ์ž์— ๋Œ€ํ•œ ๋ฐ˜์‘44 (minishell)
minishell-1.0 %% wc < test.txt |             # ํŒŒ์ดํ”„๋ผ์ธ๋’ค์— ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€์•Š๋Š”๋‹ค๋ฉด
zsh: segmentation fault  ./minishell         # ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ๋‹ค. ๋ฌธ์ œ๋ฐœ์ƒ.
                                             # ์ด์™€ ๊ด€๋ จํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•˜๋‹ค.

 

๐Ÿ“‹ case03 ์ค‘๋ณต๋œ ์š”์ฒญ

- ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ž…์ถœ๋ ฅ์ด๋‚˜ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ๋ผ์ธ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ ๊ฐ๊ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฐ˜์‘์„ ํ™•์ธํ•˜์˜€๋‹ค.

- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋„ ์—†๊ณ  ๋™์ž‘ ๋˜ํ•œ bashํ™˜๊ฒฝ๊ณผ ์ผ์น˜ํ•œ๋‹ค.

# ์‹คํ—˜์— ์‚ฌ์šฉํ•  ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ํ™•์ธ
bash-3.2$ cat > a.txt
aaaaaaaa
bash-3.2$ cat > b.txt
bbbbbbbb
bash-3.2$ cat > c.txt
cccccccc
bash-3.2$ cat test.txt 
test!!!

# ์ค‘๋ณต๋œ ์š”์ฒญ : ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (bash)
bash-3.2$ cat < a.txt > b.txt >> c.txt < test.txt
# ์‹คํ—˜๊ฒฐ๊ณผ
bash-3.2$ cat a.txt # ์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ a.txtํŒŒ์ผ์˜ ๋‚ด์šฉ์ด๋‹ค.
aaaaaaaa            # ์ƒ์„ฑ๋‹น์‹œ์˜ ํŒŒ์ผ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค.
bash-3.2$ cat b.txt # ์ฒซ๋ฒˆ์งธ ์ถœ๋ ฅ b.txtํŒŒ์ผ์˜ ๋‚ด์šฉ์ด๋‹ค.
bash-3.2$           # ๋ฎ์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์œผ๋กœ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜์–ด ์ด์ „๋‚ด์šฉ์ด ์‚ฌ๋ผ์กŒ๋‹ค.
bash-3.2$ cat c.txt # ์„ธ๋ฒˆ์งธ ์ถœ๋ ฅ c.txt
cccccccc            # ์ด์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์œผ๋กœ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜์–ด ์ด์ „๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค.
test!!!             # ๋งˆ์ง€๋ง‰์— ์ •ํ•ด์ง„ ์ถœ๋ ฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์˜ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
bash-3.2$ cat test.txt  # ๋งˆ์ง€๋ง‰์— ์ •ํ•ด์ง„ ์ž…๋ ฅ์ด๊ธฐ ๋•Œ๋ฌธ์— cat์€ ํ•ด๋‹นํŒŒ์ผ์„ ์ฝ์–ด ๋งˆ์ง€๋ง‰์ถœ๋ ฅ์— ๋ฐ˜์˜ํ•˜์˜€๋‹ค.
test!!!                 # ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ์œ ์ง€๋˜๊ณ ์žˆ๋‹ค.

# ์‹คํ—˜์— ์‚ฌ์šฉํ•  ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ํ™•์ธ
minishell-1.0 %% cat > a.txt
aaaaaaaa
minishell-1.0 %% cat > b.txt
bbbbbbbb
minishell-1.0 %% cat > c.txt
cccccccc
minishell-1.0 %% cat test.txt
test!!!

# ์ค‘๋ณต๋œ ์š”์ฒญ : ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (minishell)
minishell-1.0 %% cat < a.txt > b.txt >> c.txt < test.txt
# ์‹คํ—˜๊ฒฐ๊ณผ
minishell-1.0 %% cat a.txt     # ์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ a.txtํŒŒ์ผ์˜ ๋‚ด์šฉ์ด๋‹ค.
aaaaaaaa                       # ์ƒ์„ฑ๋‹น์‹œ์˜ ํŒŒ์ผ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค.
minishell-1.0 %% cat b.txt     # ์ฒซ๋ฒˆ์งธ ์ถœ๋ ฅ b.txtํŒŒ์ผ์˜ ๋‚ด์šฉ์ด๋‹ค.
minishell-1.0 %%               # ๋ฎ์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์œผ๋กœ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜์–ด ์ด์ „๋‚ด์šฉ์ด ์‚ฌ๋ผ์กŒ๋‹ค.
minishell-1.0 %% cat c.txt     # ์„ธ๋ฒˆ์งธ ์ถœ๋ ฅ c.txt 
cccccccc                       # ์ด์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์œผ๋กœ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜์–ด ์ด์ „๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค.
test!!!                        # ๋งˆ์ง€๋ง‰์— ์ •ํ•ด์ง„ ์ถœ๋ ฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์˜ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
minishell-1.0 %% cat test.txt  # ๋งˆ์ง€๋ง‰์ž…๋ ฅ์œผ๋กœ cat์€ ํ•ด๋‹นํŒŒ์ผ์„ ์ฝ์–ด ๋งˆ์ง€๋ง‰์ถœ๋ ฅ์— ๋ฐ˜์˜ํ•˜์˜€๋‹ค.
test!!!                        # ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ์œ ์ง€๋˜๊ณ ์žˆ๋‹ค.

# ์ค‘๋ณต๋œ ์š”์ฒญ : ํžˆ์–ด๋„ํ๋จผํŠธ (bash)
bash-3.2$ cat << A << B << C << D
> aaaaaaaa          # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> A                 # ์ข…๋ฃŒ๋ฌธ์ž'A'
> bbbbbbbb          # ๋‘๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> B                 # ์ข…๋ฃŒ๋ฌธ์ž'B'
> cccccccc          # ์„ธ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> C                 # ์ข…๋ฃŒ๋ฌธ์ž'C'
> dddddddd          # ๋„ค๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> D                 # ์ข…๋ฃŒ๋ฌธ์ž 'D'
dddddddd            # cat์€ ๋งˆ์ง€๋ง‰ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ฝ์—ˆ๋‹ค.

# ์ค‘๋ณต๋œ ์š”์ฒญ : ํžˆ์–ด๋„ํ๋จผํŠธ (minishell)
minishell-1.0 %% cat << A << B << C << D
> aaaaaaaa          # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> A                 # ์ข…๋ฃŒ๋ฌธ์ž'A'
> bbbbbbbb          # ๋‘๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> B                 # ์ข…๋ฃŒ๋ฌธ์ž'B'
> cccccccc          # ์„ธ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> C                 # ์ข…๋ฃŒ๋ฌธ์ž'C'
> dddddddd          # ๋„ค๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> D                 # ์ข…๋ฃŒ๋ฌธ์ž 'D'
dddddddd            # cat์€ ๋งˆ์ง€๋ง‰ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ฝ์—ˆ๋‹ค.

# ์‹คํ—˜์— ์‚ฌ์šฉํ•  ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ํ™•์ธ (์‚ฌ์šฉ ํ›„ ๋™์ผ์กฐ๊ฑด์œผ๋กœ ์žฌ์ƒ์„ฑ)
minishell-1.0 %% cat a.txt 
aaaaaaaa
minishell-1.0 %% cat c.txt 
cccccccc
test!!!
minishell-1.0 %% cat test.txt 
test!!!
minishell-1.0 %% cat b.txt 
bbbbbbbb
minishell-1.0 %%

# ์ค‘๋ณต๋œ ์š”์ฒญ : ๋ฆฌ๋‹ค์ด๋ ‰์…˜xํžˆ์–ด๋„ํ๋จผํŠธ (bash)
bash-3.2$ cat < a.txt << END >> b.txt > c.txt < test.txt
> endendend          # ๊ณง๋ฐ”๋กœ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> END                # ์ข…๋ฃŒ๋ฌธ์ž 'END'
bash-3.2$ cat a.txt      # a.txt ํ™•์ธ
aaaaaaaa                 # ๋‚ด์šฉ์œ ์ง€.
bash-3.2$ cat b.txt      # b.txt ํ™•์ธ
bbbbbbbb                 # ๋‚ด์šฉ์œ ์ง€.
bash-3.2$ cat c.txt      # c.txt ํ™•์ธ
test!!!                  # ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜์—ˆ๋‹ค.
bash-3.2$ cat test.txt   # test.txt
test!!!                  # ๋‚ด์šฉ์œ ์ง€, ๋งˆ์ง€๋ง‰์ž…๋ ฅ์œผ๋กœ cat์€ ํ•ด๋‹นํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์—ˆ๋‹ค.

# ์ค‘๋ณต๋œ ์š”์ฒญ : ๋ฆฌ๋‹ค์ด๋ ‰์…˜xํžˆ์–ด๋„ํ๋จผํŠธ (minishell)
minishell-1.0 %% cat < a.txt << END >> b.txt > c.txt < test.txt
>  eeeeeeeeeeeeeeee      # ๊ณง๋ฐ”๋กœ ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> END                    # ์ข…๋ฃŒ๋ฌธ์ž 'END'
minishell-1.0 %% cat a.txt    # a.txt ํ™•์ธ
aaaaaaaa                      # ๋‚ด์šฉ์œ ์ง€
minishell-1.0 %% cat b.txt    # b.txt ํ™•์ธ
bbbbbbbb                      # ๋‚ด์šฉ์œ ์ง€
minishell-1.0 %% cat c.txt    # c.txt ํ™•์ธ
test!!!                       # ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜์—ˆ๋‹ค.
minishell-1.0 %% cat test.txt # test.txt ํ™•์ธ
test!!!                       # ๋‚ด์šฉ์œ ์ง€, ๋งˆ์ง€๋ง‰์ž…๋ ฅ์œผ๋กœ cat์€ ํ•ด๋‹นํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์—ˆ๋‹ค.

 

๐Ÿ“‹ case04 ์ค‘๋ณต๋œ ์š”์ฒญ๊ณผ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ž

- ์ค‘๋ณต๋œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ์ผ€์ด์Šค๋“ค์ด ๋“ค์–ด๊ฐ”์„ ๊ฒฝ์šฐ, ์–ด๋–ค ๋ฐ˜์‘์„ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋˜๋‹ค์‹œ ๋ฐœ๊ฒฌ๋œ ์ฐจ์ด์ ์€ ์ถœ๋ ฅ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ์ •์˜๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค๋Š” ์ ์ด๋‹ค.

- ๊ธฐ์กด bashํ™˜๊ฒฝ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์— ๋ชจ๋“  ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•ด์„œ ์ผ์ ˆ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋Š”๋‹ค.

- minishell์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜์˜๋˜์ง„ ์•Š์œผ๋‚˜, ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ถœ๋ ฅ์—์„œ ๊ทธ ๋ถ€ํ˜ธ์˜ ์ •์˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

- ๋ฆฌ๋””๋ ‰์…˜ ๋ผ์ธ์˜ ์œ ํšจ์„ฑ์„ ๋จผ์ € ํŒ๋ณ„ํ•˜๋Š” ์‹์œผ๋กœ ๋ฌธ์ œํ•ด๊ฒฐ์„ ๋ชจ์ƒ‰ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

# bashํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ, ์ค‘๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๋•Œ ์ž…์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜๋“ค์„ ์ฒ˜๋ฆฌํ•˜์ง€์•Š๋Š”๋‹ค.
bash-3.2$ cat < a.txt > b.txt >> < c.txt < test.txt
bash: syntax error near unexpected token `<''   # ์•„๋งˆ๋„ ๋ฌธ์ œ๋ฐœ์ƒ์ง€์ ์˜ ๊ทผ์ฒ˜๋ฅผ ํ‘œ์‹œํ•œ ๋“ฏ ์‹ถ๋‹ค. 
bash-3.2$ cat b.txt  # b.txt์˜ ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ์˜คํ”ˆ๋˜์—ˆ์ง€๋งŒ ๋‚ด์šฉ์ด ์œ ์ง€๋˜๊ณ ์žˆ๋‹ค.
bbbbbbbb             # ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ์ด ์•„๋‹ˆ๋”๋ผ๋„ ์ฒ˜๋ฆฌํ•˜์ง€์•Š์•˜๋‹ค.

# minishell์˜ ๊ฒฝ์šฐ, ์ค‘๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ๋„ ์ž…๋ ฅ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์„๋ฟ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ถœ๋ ฅ์˜ ์ •์˜๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค.
minishell-1.0 %% cat < a.txt > b.txt >> < c.txt < test.txt
minishell: syntax error near unexpected token: >>  # ํ•ด๋‹น ๋ถ€ํ˜ธ์— ๋ฌธ์ œ๊ฐ€์žˆ์Œ์„ ์•Œ๋ฆฌ๊ณ ์žˆ๋‹ค.(..๐ŸŒฑ)
minishell-1.0 %% cat b.txt            # ์ž…๋ ฅ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜์˜๋˜์ง„ ์•Š์œผ๋‚˜, ์ถœ๋ ฅ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ์ •์˜๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค.
minishell-1.0 %%                      # ๋งˆ์ง€๋ง‰์ถœ๋ ฅ๊ณผ ๊ด€๊ณ„์—†์ด ์ถœ๋ ฅ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ์ •์˜๋งŒ ๋ฐ˜์˜๋œ๋‹ค.

 

๐Ÿ“‹ case05 ์ค‘๋ณต๋œ ์š”์ฒญ๊ณผ ํŒŒ์ดํ”„๋ผ์ธ

- ํŒŒ์ดํ”„๋ผ์ธ์—์„œ๋„ ์ค‘๋ณต์š”์ฒญ์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํ•˜์ง€๋งŒ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ๋ช…๋ น์–ด๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค.

- ๋งŒ์•ฝ ํŒŒ์ดํ”„ ์ด์ „์— ์ž…์ถœ๋ ฅ์ด ๋ชจ๋‘ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ๋„ ํ™•์ธ๋˜์—ˆ๋‹ค.

- minishell ์กฐ๊ฑด์˜ ํŒ๋‹จ๊ธฐ์ค€์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค. 

- ๋งˆ์ง€๋ง‰์— ์˜ˆ์ •๋˜์–ด์žˆ๋˜ "๋ชจ๋“  ์ผ€์ด์Šค์˜ ํ˜ผํ•ฉ"์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

# ์‹คํ—˜์„ ์œ„ํ•œ ํŒŒ์ผ์ƒ์„ฑ (์‚ฌ์šฉํ›„ ๋™์ผ์กฐ๊ฑด ์žฌ์ƒ์„ฑ)
bash-3.2$ cat > a.txt 
aaaaaaa
bash-3.2$ cat > b.txt 
bbbbbbb
bash-3.2$ cat > c.txt 
ccccccc
bash-3.2$ cat test.txt 
test!!!
bash-3.2$

# bash ํ™˜๊ฒฝ์—์„œ์˜ ์ค‘๋ณต ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ ์ž‘๋™
bash-3.2$ wc < a.txt << ENDA | cat > b.txt >> c.txt << ENDB
> aaaaaa                      # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
> aaaaaa                      # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
> ENDA                        # ์ข…๋ฃŒ๋ฌธ์ž'ENDA'์ž…๋ ฅ
> bbbbbb                      # ๋‘๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
> bbbbbb                      # ๋‘๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
> ENDB                        # ์ข…๋ฃŒ๋ฌธ์ž'ENDB'์ž…๋ ฅ
bash-3.2$ cat c.txt           # ๋งˆ์ง€๋ง‰์ถœ๋ ฅ c.txt ํ™•์ธ
ccccccc                       # ์ด์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์œผ๋กœ ์ด์ „ ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค.
bbbbbb                        # ๋‘๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ์˜ ์ž…๋ ฅ์ด ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
bbbbbb                        # ๋‘๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ์˜ ์ž…๋ ฅ์ด ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
bash-3.2$ cat b.txt           # ์ค‘๊ฐ„์— ์ง€์ •๋œ ์ถœ๋ ฅ์— ๋Œ€ํ•ด์„œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ์ •์˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
bash-3.2$                     # ๋ฎ์–ด์“ฐ๊ธฐ์˜€๊ธฐ๋•Œ๋ฌธ์— ์ด์ „์˜ ๋‚ด์šฉ์ด ์‚ฌ๋ผ์กŒ๋‹ค.

# minishell ํ™˜๊ฒฝ์—์„œ์˜ ์ค‘๋ณต ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ ์ž‘๋™
minishell-1.0 %% wc < a.txt << ENDA | cat > b.txt >> c.txt << ENDB
> ccccccccccc                   # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
> ccccccccccc                   # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
> ENDA                          # ์ข…๋ฃŒ๋ฌธ์ž'ENDA'์ž…๋ ฅ
> > minishell-1.0 %% cat b.txt  # ์ค‘๊ฐ„์— ์ง€์ •๋œ ์ถœ๋ ฅ์— ๋Œ€ํ•ด์„œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ์ •์˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค. 
minishell-1.0 %%                # ๋ฎ์–ด์“ฐ๊ธฐ์˜€๊ธฐ๋•Œ๋ฌธ์— ์ด์ „์˜ ๋‚ด์šฉ์ด ์‚ฌ๋ผ์กŒ๋‹ค.
minishell-1.0 %% cat c.txt      # ๋งˆ์ง€๋ง‰์ถœ๋ ฅ c.txt ํ™•์ธ
ccccccc                         # ์ด์–ด์“ฐ๊ธฐ ์ถœ๋ ฅ์œผ๋กœ ์ด์ „ ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค.
       2       2      24 ใ…ค      # ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ์ž…๋ ฅ์„ ๋ฐ˜์˜ํ•œ wc์˜ ์ถœ๋ ฅ์„ cat์ด ์ฝ์–ด ๋ฐ˜์˜ํ•˜์˜€๋‹ค.

# ํŒŒ์ดํ”„๋งˆ๋‹ค ์ž…์ถœ๋ ฅ์ด ๋ชจ๋‘ ์กด์žฌํ• ๊ฒฝ์šฐ, ๊ฐ๊ฐ ๋งˆ์ง€๋ง‰์ž…์ถœ๋ ฅ์ด ๋ฐ˜์˜๋œ๋‹ค (bash)
wc > a.txt << ENDA | cat > b.txt >> c.txt << ENDB
> ddd
> ENDA
> dkdkdk
> ENDB
bash-3.2$ cat a.txt 
       1       1       4         # a.txt์— ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
bash-3.2$ cat c.txt 
cccccccใ…ค
dkdkdk                           # c.txt์— ๋งˆ์ง€๋ง‰ ํ—ˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ๋ฐ˜์˜๋˜์—ˆ๋‹ค.

# ํŒŒ์ดํ”„๋งˆ๋‹ค ์ž…์ถœ๋ ฅ์ด ๋ชจ๋‘ ์กด์žฌํ• ๊ฒฝ์šฐ, ์•ž์˜ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜๋ฉฐ, ๊ทธ๋‚ด์šฉ๋„ ์˜จ์ „์น˜ ์•Š๋‹ค (minishell)
minishell-1.0 %% wc > a.txt << ENDA | cat > b.txt >> c.txt << ENDB
> jjjjjjjjjjjj                     

# ๋‘๋ฒˆ์งธํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€๋„ ์•Š์•˜๊ณ , ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ์—ญ์‹œ ๋น„์ •์ƒ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
> minishell-1.0 %% cat a.txt 
jjjjjjjjjjjj                     # a.txt์— ์ฒซ๋ฒˆ์งธ ํžˆ์–ด๋„ํ๋จผํŠธ๊ฐ€ ๋ฐ˜์˜๋˜์—ˆ๋‹ค.
                                 # wc๋ช…๋ น์ด ์•„๋‹Œ cat๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜์˜์ด๋œ๋“ฏํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.
                                 # ๋‹ค์ŒํŒŒ์ดํ”„์˜ ๋‚ด์šฉ์€ ์ถœ๋ ฅ์ด ์ •์˜๋ฅผ ๋”ฐ๋ž๋‹ค.
                                 
# ํฐ ๋ฌธ์ œ๋ฐœ์ƒ (minishell)
minishell-1.0 %% wc <<END > a.txt 
> dkdkdk         # ํžˆ์–ด๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> END            # ์ข…๋ฃŒ๋ฌธ์ž 'END'์ž…๋ ฅ
minishell-1.0 %% cat a.txt 
dkdkdk           # ํžˆ์–ด๋„ํ๋จผํŠธ์™€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ถœ๋ ฅ์—๋Œ€ํ•˜์—ฌ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐ˜์˜๋˜์ง€์•Š๋Š”๋‹ค.
minishell-1.0 %% # ๋ชจ๋“  ์ผ€์ด์Šค์— ๋Œ€ํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋˜์–ด ๊ฐ€์žฅ๋จผ์ € ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
                 # ํ˜„์žฌ ํžˆ์–ด๋„ํ๋จผํŠธ์™€ ๋ฆฌ๋””๋ ‰์…˜์˜ ํ˜ผํ•ฉ์—์„œ ์ž‘๋™๋กœ์ง์— ๋ชจ์ˆœ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค.

 

'์ผ์ƒ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

#010. ์•„์นจํ˜•์ธ๊ฐ„  (0) 2021.08.11
#009. ๋ชจ๋ฅด๊ฒ ๋‹ค  (1) 2021.08.07
#007. ๋ฏธ๋‹ˆ์…ธ์˜ ๊ธฐ๋ณธ  (0) 2021.08.04
#006. ์˜คํ”„๋ผ์ธ๊ณผ ํ˜‘์—…  (0) 2021.08.02
#005. ์˜ค๋Š˜  (0) 2021.08.01