๐ฑ ๋ฏธ๋์ ธ์ ๋ณํ (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 |