๐ป Minishell: ์ด์์ฒด์ ์ ์ถ์ํ, ํ ์คํธ์ ํ๋ก์ธ์ค ์ฌ์ด์ ๋ฒ์ญ๊ฐ๋ฅผ ์์ฒํ๋ค
ํต๊ณก์ ๋ฒฝ. ์ ๋ง์ 42์์ธ์ ๊ณผ์ ๋ค ๊ณผ์ ์์๋, ์ญ๋๊ธ์ผ๋ก ๊ณ ๋ฏผํ๊ณ , ์ํตํ ์ผ์ด ๋ง์์ง๋ ํ๋ก์ ํธ. ์ฝ์ง ์์๋ ์ด ํ๋ก์ ํธ๋ ์ง๊ธ๋ ๋๊ณ ๋๊ณ ์๊ฐ๋๋, ์ ๋ง ์ฝ์ง ์์ โํํ ๊ฒโ ์ด์๋ค.
์ด์ ์ ๊ณผ์ ๋ค์ด ๊ฐ๋ณ์ ์ธ ์์คํ ์ฝ์ด๋ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ๊น๊ฒ ํ๊ณ ๋๋ ๊ฒฝํ์ด์๋ค๋ฉด, Minishell์ ์ด ๋ชจ๋ ๊ฒ์ ์์ฐ๋ฅด๋ ํ๋์ ์์ ์ด์์ฒด์ ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ์ข ํฉ์ ์ธ ๊ณผ์ ์ด๋ค.
์ ธ(Shell)์ ๋จ์ํ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ํ๋ก๊ทธ๋จ์ ๋์ด, ์ปค๋(Kernel)์ด๋ผ๋ ์์คํ ์ ์ฌ์ฅ๋ถ์ ์ฌ์ฉ์ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ ๊ตํ ์ธํฐํ์ด์ค์ด์ ๋ฒ์ญ๊ฐ์ด๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์ค์ ํ ์คํธ ๋ฌธ์์ด์ด ์ด๋ป๊ฒ ์๋ช ๋ ฅ์ ์ป์ด ์ฌ๋ฌ ํ๋ก์ธ์ค์ ํ์ฐ์ผ๋ก ์ฌํ์ํ๋์ง, ๊ทธ ๋ชจ๋ ๊ณผ์ ์ ์ง์ ์งํํด์ผ ํ๋, ์์คํ ํ๋ก๊ทธ๋๋จธ๋ก์์ ์ง์ ํ ์ญ๋์ ์ํ๋ฐ๋ ํ๋ก์ ํธ์ด๋ค.
Minishell์ โ์ด๋ป๊ฒ ๋ฌธ์์ด์ ํด์ํ๊ณ (Parsing), ์ด๋ป๊ฒ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฉฐ(Process Management), ์ด๋ป๊ฒ ๊ทธ๋ค ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์ดํ ๊ฒ์ธ๊ฐ(IPC & I/O Redirection)โ๋ผ๋ ์ธ ๊ฐ์ง ๊ฑฐ๋ํ ์ง๋ฌธ์ ๋ํ ๋ต์ ์ฐพ์๊ฐ๋ ์ฌ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ํ ์คํผ ๋.
์ด ๊ณผ์ ๋ 42์์ธ์์์ ๋ณธ ๊ณผ์ ์์์ ์ต์ด ํ ๊ณผ์ ์ด๋ค.
๐ 0๋จ๊ณ: ํ์ ๊ธธ ๋ค์ด๊ธฐ
์ฒ์ ์ํํ ํ์ ์ ์์์ ์ ๋ง๋ก โ์ด์โ ํ๋ค.
์ฒ์ ๋ง์งํ๋ git, ๋ฒ์ ๊ด๋ฆฌ, git ์ ๋ต๊ณผ ๊ฐ์ ๋ด์ฉ๋ค์ ์์ํ๋ฐ, ์ฌ์ง์ด โ์ผโ์ด ์๋๋ผ โ๋ฐฐ์โ์ด๋ ์ฐจ์์์ ์งํํ๋ ํ๋ก์ ํธ๋ค๋ณด๋ ์ฌ๋ฟ์ ์๊ฐ์ด๋, ์ฃผ์ฅ์ด ์ด์ด์ก๊ณ ์ด๋ฌํ ๊ฒ๋ค ์์์ ์ด๋ป๊ฒ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ด๋ด๋ ์ง๋ ์ ๋ง ์ด๋ ค์ด ์ผ์ด์๋ค. ๊ทธ๋๋ง 2๋ช ์ด ํ๋ค๋ ์ ์์, ํด๋น ํ๋ก์ ํธ์ ๋ชฉํ๊ฐ ๋ณธ๊ฒฉ์ ์ธ ํ์ ์ด๋ผ๊ธฐ ๋ณด๋จ, โํ์ ๋ง๋ณด๊ธฐโ ๋ผ๋ ์ปจ์ ์ด๋ผ๋ ์ฐจ์์์ ๋ณธ๋ค๋ฉด ๊ทธ๋๋ง ๊ด์ฐฎ์๋ค๊ณ ๋ณธ๋ค.
์ฐ์ , ์๋๋ฅผ ํ์ ํ๋ค. ์๋์ ํํ, ์๋๊ฐ ๋ฐ๋ผ๋ ๋ฐ, ํนํ๋ ๋ชฉํ๊ฐ ๋์ผํ๋ค๊ณ ํด๋, ๊ทธ ๋์ผํ ๋ชฉํ์ ๋ํด ์ดํดํ๊ณ ์๋ ๊ฒ์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋ง์๋ค. ํนํ๋ ์ ๊ฒฝ ์ด ๊ฒ์ โํํโ์ ์ ๊ตํ๋ค.
ํ์ชฝ์ด ์๋ฌด๋ฆฌ ์ง์์ด ๋ฐ์ด๋๋, ํ์ ์ ํด์ ํจ์จ์ ๋ด๋ ค๋ฉด, ์๋๊ฐ ์ดํดํ๋ ๋ง๋ก ํด์ค ์ ์์ด์ผ ํ๊ณ , ์ค์ ๋ก ํ๋ก์ธ์ค ๊ณผ์ ์์ ์ฝ์๋ ์ธ์ด๋ก ํ๋ค๋ ๋ง์ ์ ๋ณด์ ๊ณต์ ์์ค๋ ๋น์ทํด์ ธ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ธฐ์ ์ ์ธ ์ ๋ต์ผ๋ก ๊น ๋ธ๋์น ์ ๋ต, PR ์ ์ด๋ป๊ฒ ํ ์งโฆ ๋ฑ ์ฒ์ ํ๋ ๊ฒ์ธ ๋งํผ, ํ์๊ณผ ์งํํ๋ ๊ณผ์ ์์ git ์ ํ์ ๊ด๋ จ ์์ ์ ๋ณด๋ฉด์, ๊ฐ์ฅ ์ต์ ์ด ๋ญ๊น ๊ณ ๋ฏผํ์๋ค.
์ฌ์ค, ์ด ๋ด์ฉ์ ๋ํ ์ผํ๊ฒ ์ ๋ฆฌํ๋ค๋ฉด ์์ฒญ๋ ์ผ์ด ๋ ๊ฑฐ๋ค. ๊ฑฐ์ ํ ํ๋ก์ ํธ๋ฅผ 3๊ฐ์๊ฐ ์ํํ๋๊ฑธ ์๊ฐํ๋ฉด, ์ผ๋ง๋ ๋ง์ ๋ํ์ ์ํต, ํนํ ๊ฑฐ๊ธฐ์ ์๋ก ์ด๋ป๊ฒ ํ๋ ๊ฑธ๋ก ํด์ผ ํจ์จ์ ์ผ์ง ๋ ผํ๋ ์๊ฐ๋ค์ ์ง๊ธ ์๊ฐํ๋ฉด ๋ฌด์ฒ ๊ฐ์ง ์ผ์ด์์ง๋ง ๋์์ ํ๋ ๊ณผ์ ์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋๋ง ์์์ 42์์ธ์ ํ์๋ค ์๋น ์๊ฐ ๊ฐ๋ฐ์์ ๊ฐ๋ฅ์ฑ, ์ฑํฅ, ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ์ด์ ๊ณผ ์ฌ๋ฏธ๋ฅผ ๋๋ผ๋ ์ด๋ค์ด์๊ธฐ์ ๊ทธ๋ฐ ์ ๋ค์ด ์ฐ๋ฆฌ๋ฅผ ๋ฌถ์ด์ฃผ์๋ ๊ฒ์ด๋ค.
๐ 1๋จ๊ณ: ๋ฌธ์์ด ํด์ (Parsing) - ๋ฌด์๋ฏธํ ํ ์คํธ์์ ์๋ฏธ ์๋ ๊ตฌ์กฐ๋ก
๋ณธ๊ฒฉ์ ์ผ๋ก ๊ธฐ๋ฅ ๊ตฌํ์ ๋ค์ด๊ฐ๋ฉด ์ ธ์ ์ฒซ ๋ฒ์งธ ์๋ฌด๋ ๋ช ๋ น์ด๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ls -al | grep "main" > result.txt์ ๊ฐ์ด ์ฝ์๋ ๋ช
๋ น์ด๋ค์ ๋์ด์ด์๋ค. ํ์ง๋ง ์ค์ ๋ก ์ปดํจํฐ๊ฐ ์ด ๋ช
๋ น์ด๋ฅผ ์์๋ฃ๋? ์๋๋ค. ์ค์ง ํฐ๋ฏธ๋์์ ์น๋ ๋ด์ฉ์ ์ปดํจํฐ๋ ์์๋ฃ์ง ๋ชปํ๋ค. 0, 1์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ โ์ดํด์ํค๋โ ์์
์ด ํ์ํ๊ณ ์ด๋ ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋๋ ๊ณผ์ ๊ณผ ์ ์ฌํ๋ฉฐ, ํฌ๊ฒ ๋ ๋จ๊ณ๋ก ๋๋๋ค.
-
์ดํ ๋ถ์ (Lexical Analysis / Tokenization): ์ ๋ ฅ๋ ๋ฌธ์์ด์
ls,-al,|,grep,"main",>,result.txt์ ๊ฐ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง ์ต์ ๋จ์์ธ ํ ํฐ(Token)์ผ๋ก ๋ถํดํ๋ค. ์ด ๊ณผ์ ์์ ๊ณต๋ฐฑ์ ๋ถ๋ฆฌ์ ๊ธฐ์ค์ด ๋๋ฉฐ, ํ์ดํ(|)๋ ๋ฆฌ๋ค์ด๋ ์ (>,<) ๊ฐ์ ํน์ ๋ฌธ์๋ โ์ฐ์ฐ์โ ํ ํฐ์ผ๋ก, ๋ฐ์ดํ๋ก ๋ฌถ์ธ ๋ฌธ์์ด์ ํ๋์ ๋จ์ผ ํ ํฐ์ผ๋ก ์ธ์ํ๋ ๋ฑ ์ ๊ตํ ๊ท์น์ด ํ์ํ๋ค. ์ด๋ฌํ ๊ท์น๋ค์ ์๊ตฌ๋๋ ์กฐ๊ฑด๋ค, ์์ ๊ธฐ๋ณธ ๋์์๋ํ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ์ ๋ถ ๊ธฐ์ ํํ์๋ค. ์ฝ์๋ ์ปจ๋ฒค์ ์ ์์ฝ๋ ๋จ์ด๋ ๋๊ตฌ๋ค์ ๋ํด ๋ฆฌ์คํธ์ ์ ํ ๋ค์๋ ์ฐ์ ์์๋ ์ด๋ค ๊ฑธ ์ฐ์ ์ ํด์ผ ํ๋์ง ๊ฐ์ํ ํ์๋ค. -
๊ตฌ๋ฌธ ๋ถ์ (Syntax Analysis / Parsing): ์์ฑ๋ ํ ํฐ์ ๋ฐฐ์ด์ ๋ฐํ์ผ๋ก, ๋ช ๋ น์ด์ ๋ฌธ๋ฒ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ์ฌ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(Abstract Syntax Tree, AST)์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค. ์๋ฅผ ๋ค์ด,
A | B > C๋ผ๋ ๋ช ๋ น์ด๋ โํ์ดํโ๋ผ๋ ์ต์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๊ณ , ๊ทธ ์ผ์ชฝ ์์์ผ๋ก๋ โAโ๋ผ๋ ๊ฐ๋จํ ๋ช ๋ น์ด(Simple Command) ๋ ธ๋๊ฐ, ์ค๋ฅธ์ชฝ ์์์ผ๋ก๋ โ๋ฆฌ๋ค์ด๋ ์ โ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋๋ ํํ๊ฐ ๋๋ค. ์ด ํธ๋ฆฌ๋ฅผ ํตํด ๊ฐ ๋ช ๋ น์ด์ ๊ด๊ณ์ ์คํ ์์, ์ ์ถ๋ ฅ ๋ฐฉํฅ์ด ๋ช ํํ๊ฒ ์ ์๋๋ค. ์ด ๊ณผ์ ์์ ๋ซํ์ง ์์ ๋ฐ์ดํ๋ ๋ฌธ๋ฒ์ ๋ง์ง ์๋ ํน์๋ฌธ์ ์ฌ์ฉ๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ์ก์๋ด๋ ๊ฒ๋ ํ์์ ์ค์ํ ์ญํ ์ด๋ค. ํนํ๋ ํ์ด๋ ๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์ํ ๊ฐ๋ณ ๋ก์ง์ด ์ธ์ ์ด๋ป๊ฒ ์คํ ๋๋์ง์ ๊ฐ์ ํฌ์ธํธ๋ค์ ์ดํดํ๋ ๊ฒ๋ ๋งค์ฐ ์ค์ํค์ง๋ฉฐ, ์ด๋ฅผ ๊ตฌ์กฐ์ฒด๋ก ๋ด์๋ด๋ ์์ , ๊ทธ๋ฆฌ๊ณ ํนํ๋ ์ด๋ฐ ๋ฐ์ดํฐ ๋จ์๋ก ํ์์ด ํธ๋ฆฌํ ๋ฉ์๋๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ฐ๋ฐ ์๋์๋ ์ง๋ํ ์ํฅ์ ์ฃผ์๋ค.
- ๋ฐ์ดํ์ ํ๊ฒฝ ๋ณ์ ์ฒ๋ฆฌ: ํ์ฑ ๊ณผ์ ์์ ์
ธ์ ๋ฏธ๋ฌํ ๊ท์น๋ค์ ๊ตฌํํด์ผ ํ๋ค.
์์๋ฐ์ดํ(
')**๋ ๋ด๋ถ์ ๋ชจ๋ ๋ฌธ์๋ฅผ ํด์ ์์ด ๋ฌธ์ ๊ทธ๋๋ก ์ทจ๊ธํ๋ค. **ํฐ๋ฐ์ดํ(")๋ ๋ด๋ถ์$๋ฌธ์๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ์ธ์ํ์ฌ ๊ทธ ๊ฐ์ผ๋ก ์นํ(Expansion)ํด์ผ ํ๋ค.$?์ ๊ฐ์ด ๋ง์ง๋ง์ผ๋ก ์คํ๋ ๋ช ๋ น์ด์ ์ข ๋ฃ ์ฝ๋๋ฅผ ๋ํ๋ด๋ ํน์ํ ํ๊ฒฝ ๋ณ์๋ ์ฒ๋ฆฌํด์ผ ํ๋ค.
๐ ๏ธ 2๋จ๊ณ: ๋ช ๋ น์ด ์คํ (Execution) - ๊ตฌ์กฐํ๋ ๋ช ๋ น์ ์๋ช ์ ๋ถ์ด๋ฃ๋ค
๊ตฌ๋ฌธ ๋ถ์์ ํตํด ๋ง๋ค์ด์ง ์คํ ๊ณํ(AST)์ ์ด์ ์ง์ ์คํ๋๊ฒ ํ๋ฉด ๋๋ค. ์คํ๊ธฐ๋ ํธ๋ฆฌ๋ฅผ ์ํํ๋ฉฐ ๊ฐ ๋ ธ๋์ ํ์ ์ ๋ฐ๋ผ ์ ์ ํ ์์คํ ์ฝ์ ํธ์ถํ๋ ์ญํ ์ ํ๊ณ , ์ด๋ ๋ฆฌ๋ ์ค OS ์ ์ฒ ํ, ํ๋ก์ธ์ค์ ๋ผ์ดํ ์ฌ์ดํด์ ์ดํดํ๋ ๊ฒ์ด ์ ๋ง ์ค์ํด์ง๋ค.
-
ํ๋ก์ธ์ค ์์ฑ (
fork):ls,grep๊ณผ ๊ฐ์ ์ธ๋ถ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ํดfork()์์คํ ์ฝ๋ก ํ์ฌ ์ ธ ํ๋ก์ธ์ค์ ๋๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. ์ดํ ์์ ํ๋ก์ธ์ค๋execve()์์คํ ์ฝ์ ํตํด ์๊ธฐ ์์ ์ ์๋ก์ด ํ๋ก๊ทธ๋จ(ls๋ฑ)์ผ๋ก ๊ต์ฒดํ์ฌ ์คํํ๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค(์ ธ)๋waitpid()๋ฅผ ํตํด ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ, ์ข ๋ฃ์ ํจ๊ป ์ ์ด๊ถ์ ๋ค์ ๊ฐ์ ธ์ ๋ค์ ๋ช ๋ น์ ๋ฐ์ ์ค๋น๋ฅผ ํ๋ค. ์ด๋ ํนํ๋ ์๋ฌํธ๋ค๋ง์ ์ํด์ฃผ๋ ๊ฒ์ด ํ์ํ๊ณ , ์ ์ ํ ๋ฌธ๊ตฌ๋ฅผ ํตํด ๋ช ๋ น์ด ์ ์คํจํ๋์ง๋ฅผ ์ดํดํ๋๊ฒ, ๋๋ฒ๊น ์ ํต์ฌ์ด์๋ค. - ํ์ดํ (
|) - ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC):pipe()์์คํ ์ฝ์ ๋ ๊ฐ์ ํ์ผ ๋์คํฌ๋ฆฝํฐ(์ฝ๊ธฐ์ฉ, ์ฐ๊ธฐ์ฉ)๋ฅผ ์์ฑํ์ฌ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ฑ๋์ ๋ง๋จ๋ค.A |B๊ตฌ๋ฌธ์์, ์ ธ์ ํ์ดํ๋ฅผ ์์ฑํ ํ ๋ ๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ ๋ค. ์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ด ํ์ผ, FD ๋ฅผ ํตํด ์ด๋ป๊ฒ ๊ด๋ฆฌ๋๋์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ด์๋ค. ํนํ๋, ์ด๊ณ ๋ซ๋ ๊ฒ์ด ๊ต์ฅํ ์ค์ํด์ง๋๋ฐ, ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์ํ ๋, ์ถ๋ ฅ-์ ๋ ฅ์ ์ด๋ ค์๋ ๊ฒ๋ค์ ์ ๋ซ์์ฃผ๋ ๋ก์ง์ด ์๋๊ฒ ๋๋ฉด ์ด์ ํ๋ก์ธ์ค๊ฐ ์ถ๋ ฅํ๊ณ ๋ด์์ง๋ง, ํ๋ก์ธ์ค๊ฐ ์ ์ ์ข ๋ฃ๊ฐ ์ ๋ ๊ฒ, ํน์ ๋ฐ์ดํฐ๊ฐ ๋ ๋ค์ด์ฌ๊ฒ ๋จ์๋ค๋ ์์ผ๋ก ๋๊ธฐ ๋๋ฌธ์ ์ด ํน์ง์ ์ดํดํ์ง ์์ผ๋ฉด ์ฃผ๊ตฌ์ฅ์ฐฝ ๋๊ธฐํ๋ ์ํ๊ฐ ๋๋ค๋ ๊ฒ์โฆ ๋์ฐํ ๊ฒฝํ์ด์๋ค(โฆ)- ํ๋ก์ธ์ค A: ์์ ์ ํ์ค ์ถ๋ ฅ(STDOUT, fd 1)์ ํ์ดํ์ ์ฐ๊ธฐ์ฉ ๋์ ์ฐ๊ฒฐ(
dup2)ํ๊ณ ,A๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.A์ ๋ชจ๋ ๊ฒฐ๊ณผ๋ ์ด์ ํ๋ฉด์ด ์๋ ํ์ดํ๋ก ํ๋ฌ ๋ค์ด๊ฐ๋ค. - ํ๋ก์ธ์ค B: ์์ ์ ํ์ค ์
๋ ฅ(STDIN, fd 0)์ ํ์ดํ์ ์ฝ๊ธฐ์ฉ ๋์ ์ฐ๊ฒฐ(
dup2)ํ๊ณ ,B๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.B๋ ์ด์ ํค๋ณด๋๊ฐ ์๋ ํ์ดํ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฒ๋ฆฌํ๋ค.
- ํ๋ก์ธ์ค A: ์์ ์ ํ์ค ์ถ๋ ฅ(STDOUT, fd 1)์ ํ์ดํ์ ์ฐ๊ธฐ์ฉ ๋์ ์ฐ๊ฒฐ(
-
๋ฆฌ๋ค์ด๋ ์ (
<,>,>>,<<) - ํ์ผ ๋์คํฌ๋ฆฝํฐ ์ ์ด: ๋ฆฌ๋ค์ด๋ ์ ์ ํ๋ก์ธ์ค์ ํ์ค ์ ์ถ๋ ฅ ๋์์ ํ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ธฐ์ ์ด๋ค. ์ด๋open()์ผ๋ก ํ์ผ์ ์ด๊ณ ,dup2()๋ก ๊ธฐ์กด์ ํ์ค ์ ์ถ๋ ฅ ํ์ผ ๋์คํฌ๋ฆฝํฐ(0, 1, 2)๋ฅผ ์๋ก ์ด๋ฆฐ ํ์ผ์ ๋์คํฌ๋ฆฝํฐ๋ก ๋ณต์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค. *>: ๋ช ๋ น์ด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ์ ๋ฎ์ด์ด๋ค. *<: ํ์ผ์ ๋ด์ฉ์ ๋ช ๋ น์ด์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ค. *>>: ๋ช ๋ น์ด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ ๋์ ์ถ๊ฐํ๋ค. *<< (Here Document): ๊ตฌ๋ถ์(delimiter)๊ฐ ๋์ฌ ๋๊น์ง ์ ๋ ฅ์ ๋ฐ์ ์์ ํ์ผ์ ์ ์ฅํ ํ, ํด๋น ์์ ํ์ผ์ ํ์ค ์ ๋ ฅ์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค. - ๋ด์ฅ ํจ์ (Built-ins):
cd,export,unset,exit์ ๊ฐ์ด ์ ธ ํ๋ก์ธ์ค ์์ฒด์ ์ํ(ํ์ฌ ์์ ๊ฒฝ๋ก, ํ๊ฒฝ ๋ณ์ ๋ฑ)๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๋ช ๋ น์ด๋ค์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ผ๋ก ์คํํ ์ ์๋ค. ์ด๋ฌํ ๋ด์ฅ ํจ์๋ค์ ํ๋ก์ธ์ค์ ์ฃผ์ธ์ด ๋๋ ๋ฉ์ธ ํ๋ก์ธ์ค์ ์ค์ ์ ๊ฑด๋๋ฆฌ๊ฑฐ๋, ์ํธ์์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ดcd๋ฅผ ์์ ํ๋ก์ธ์ค์์ ์คํํ๋ฉด ์์์ ๊ฒฝ๋ก๋ง ๋ฐ๋๊ณ ์ ธ ์์ ์ ๊ทธ๋๋ก์ด๊ณ , ์ด๋ ๊ฒ ๋๋ฉด ๊ทธ ๋ค์ ์ค๋ ๋ช ๋ น์ด ๋น์ ์์ ์ผ๋ก ์คํ ๋ฐ ์ข ๋ฃ ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋fork์์ด ์ ธ์ด ์ง์ ํจ์ ํธ์ถ์ ํตํด ์ฒ๋ฆฌํด์ผ ํ๋ค.README.md์ ๋ช ์๋echo,cd,pwd,export,unset,env,exit๊ฐ ์ด์ ํด๋น๋๊ณ , ์ด๋ค์ ๋ ์์ ์ธ ๋ฐฉ์์ผ๋ก OS ์ ์ฃผ ํ๋ก์ธ์ค์ ์ง์ ์ํฅ์ ์ฃผ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
๐ฆ 3๋จ๊ณ: ์๊ทธ๋ ์ฒ๋ฆฌ - ์๊ธฐ์น ์์ ์ํฉ์ ๋์ํ๊ธฐ
์ฌ์ฉ์๋ ์ธ์ ๋ ์ง Ctrl+C(SIGINT)๋ Ctrl+D(EOF)๋ฅผ ๋๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๋ ค ํ ์ ์๋ค.์ํธ์์ฉ์ ์ธ ์
ธ์ ์ด๋ฌํ ์๊ทธ๋์ ์ ์ ํ ์ฒ๋ฆฌํ์ฌ, ์์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ผ ๋์ ํ๋กฌํํธ์์ ์
๋ ฅ์ ๋๊ธฐ ์ค์ผ ๋ ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ์ค๊ณํด์ผ ํ๋ค. signal ๋๋ sigaction ํจ์๋ฅผ ํตํด ํน์ ์๊ทธ๋์ด ๋์ฐฉํ์ ๋ ์ํํ ๋์์ ์ ์ํ์ฌ, ํ๋ก๊ทธ๋จ์ ์์ ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์์ผฐ๋ค.
*๋๊ธฐ ์ค: Ctrl+C๋ ์ ํ๋กฌํํธ๋ฅผ, Ctrl+D๋ ์
ธ์ ์ข
๋ฃํ๋ค.
- ์คํ ์ค:
Ctrl+C์Ctrl+\๋ ์คํ ์ค์ธ ์์ ํ๋ก์ธ์ค์๊ฒ ์ ๋ฌ๋์ด์ผ ํ๋ค.
โจ ์ฑ์ฐฐ ๋ฐ ๋ฐฐ์ด ์
Minishell์ ๋จ์ํ C ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ๊ฐ ์๋์๋ค. ์ด์์ฒด์ ๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ํ๋ก์ธ์ค๋ค์ ์กฐ์จํ๋ฉฐ, ๋ฐ์ดํฐ์ ํ๋ฆ์ ๊ด๋ฆฌํ๋์ง์ ๋ํ ์ดํด๋๋ฅผ ๋์ผ ์ ์๋ ์ ๋ง ์ข์ ๊ณผ์ ์๋ค๊ณ ์๊ฐํ๋ค. ๋ฟ๋ง ์๋๋ผ ํ ๊ฐ์ธ์ด ๊ฐ๋ฐํ ์ ์๋ ํ๊ณ๊ฐ ์๊ณ , ๊ฒฐ๊ตญ ํ์
์ผ๋ก ๋ง๋ค์ด๋ด๋ ์ข
ํฉ ์์ ์์ ์ฒ์์ผ๋ก ๋๋ ์ ์๋ ๊ณผ์ ๋ค. ๊ทธ ์์ค์ ๋๋ ์ ๋ค ๋ช๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด,
- ์ถ์ํ์ ์๋ํจ:
|๋>๊ฐ์ ๊ฐ๋จํ ๊ธฐํธ ๋ค์fork,pipe,dup2,execve์ ๊ฐ์ ๋ณต์กํ ์์คํ ์ฝ๋ค์ ์ค์ผ์คํธ๋ผ๊ฐ ์จ์ด์์์ ๊นจ๋ฌ์ผ๋ฉฐ, ์ ์ค๊ณ๋ ์ถ์ํ์ ํ์ ์ฒด๊ฐํ๋ค. - ํ๋ก์ธ์ค ๊ด๋ฆฌ์ ์ ์: ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค์ ๊ด๊ณ, ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ์์, ํ๋ก์ธ์ค์ ๋ผ์ดํ์ฌ์ดํด์ ์ง์ ๊ด๋ฆฌํ๋ฉฐ ์ด์์ฒด์ ์ ํต์ฌ ์ญํ ์ธ ํ๋ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ํผ๋ถ๋ก ์ดํดํ๊ฒ ๋์๋ค.
- ์ค๊ณ์ ์ค์์ฑ: ์ดํ ๋ถ์๊ธฐ, ๊ตฌ๋ฌธ ๋ถ์๊ธฐ, ์คํ๊ธฐ๋ฅผ ๊ฐ๊ฐ ๋ ๋ฆฝ๋ ๋ชจ๋๋ก ์ค๊ณํ๊ณ , ์ด๋ค์ ์ฐ๊ฒฐํ๋ ๋ช ํํ ์๋ฃ๊ตฌ์กฐ(AST)๋ฅผ ์ ์ํ๋ ๊ณผ์ ์, ๋ณต์กํ ์์คํ ์ ๊ตฌ์ถํ๊ธฐ ์ํด์ ๊ฒฌ๊ณ ํ ์ํคํ ์ฒ ์ค๊ณ๊ฐ ์ ํ๋์ด์ผ ํจ์ ๊ฐ๋ฅด์ณ์ฃผ์๋ค.
์ ๋ง ์ฝ์ง ์์๋ค. ํฌ๊ธฐํ๊ณ ์ถ๋ค๋ ์๊ฐ์ ์ ๋ง ๋ง์ด ํ๊ณ , ๋ฌด์๋ณด๋ค ํ์๊ณผ ํจ๊ป ๊ธฐ์ด์ด ๋น ์ง๋ ์ ๋ง ์ฝ์ง ์์ ํ๋ก์ ํธ์๋ค. ๊ทธ๋๋ ์ญ์ ๊ทธ๋ฐ ๊ฑธ๊น? ๋์๋ณด๋ ์ ๋ง ์ฌ๋ฐ๊ณ , ์น์ดํ๋๊ฒ ๊ฐ๋ค. ๐คฃ
