์ด ํ๋ก์ ํธ๋ Bash๋ฅผ ์ฐธ๊ณ ํ์ฌ POSIX shell์ ๊ตฌํํฉ๋๋ค.
์ผ์ชฝ : minishell
์ค๋ฅธ์ชฝ : zsh
minishell์ ์ปดํ์ผ ํ๊ธฐ ์ํด GNU์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ readline์ด ํ์ํฉ๋๋ค.
mac OS
brew install readline@8.1
linux
sudo apt install libreadline-dev
arm64 ์ํคํ ์ณ์์๋ rl_replace_line() ํจ์๊ฐ ์ ๋๋ก ๋์ํ์ง ์์ ์ ์์ต๋๋ค. ํด๋น ํจ์๋ฅผ ์ฃผ์์ฒ๋ฆฌ ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ์ปดํ์ผ ๋ฉ๋๋ค.
๋ฃจํธ์ (all, clean, fclean, re)๊ท์น์ ์ ๊ณตํ๋ Makefile์ด ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ ํ์ฌ minishellํ๋ก๊ทธ๋จ์ ์์ฑํฉ๋๋ค.
make all
minishellํ๋กฌํํธ ์คํ
./minishell
- ์์ ์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์ฌ์ฉ์ ์ ๋ ฅ์์ ํ๊ฒฝ ๋ณ์ ํ์ฅ -> ํ์ฅ๋ ์ ๋ ฅ ํ ํฐํ -> ์คํ. - ๋ฉํฐ ํ์ดํ, ๋ฉํฐ ๋ฆฌ๋๋ ์ ๊ฐ๋ฅ.
- Heredoc์ ์ ๋ ฅ์์ ์ค๋ณต๋ ์ ์์ต๋๋ค.
- $? ์ฌ์ฉ ๊ฐ๋ฅ.
- ์ฌ์ฉ์ ์ ๋ ฅ์ quotes ์ฒ๋ฆฌ, ๋ฆฌ๋๋ ์ , ํ์ดํ๊ฐ ์ ๋๋ก ํ์ฑ๋์ง ์์ ๊ฒฝ์ฐ ๊ตฌ๋ฌธ ์ค๋ฅ ๋ฐ์.
\,;๋ฑ์ ํน์ ๋ฌธ์๋ ์ง์๋์ง ์์ง๋ง\\๋ ํ์ผ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์์.- Ctrl + C, Ctrl + D, Ctrl + \๋ Bash์ ๋์ผํ๊ฒ ๊ตฌํ.
- Readline ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ vim๊ณผ ๊ฐ์ ํธ์ง ์ง์.
add_historyํจ์๋ฅผ ์ฌ์ฉํ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ. ๋ฐ๋ผ์ ํค๋ณด๋์ ํ์ดํ ํค๋ฅผ ์ฌ์ฉํ ์ ์์.- ์ฌ๋ฌ ๋ด์ฅ ๋ช
๋ น์ด๊ฐ ๊ตฌํ๋จ. (
echo,cd,pwd,export,unset,env,exit)
openon <unistd.h>closeon <unistd.h>readon <unistd.h>writeon <unistd.h>unlinkon <unistd.h>forkon <unistd.h>dupon <unistd.h>dup2on <unistd.h>pipeon <unistd.h>execveon <unistd.h>getcwdon <unistd.h>chdiron <unistd,h>isattyon <unistd.h>ttynameon <unistd.h>ttysloton <unistd.h>errnoon <errno.h>printfon <stdio.h>strerroron <string.h>mallocon <stdlib.h>freeon <stdlib.h>getenvon <stdlib.h>exiton <stdlib.h>killon <signal.h>signalon <signal.h>opendiron <dirent.h>closediron <dirent.h>readdiron <dirent.h>tcgetattron <term.h>tcsetattron <term.h>tgetenton <term.h>tgetflagon <term.h>tgetnumon <term.h>tgetstron <term.h>tgotoon <term.h>tputson <term.h>ioctlon <sys/ioctl.h>wait3on <sys/wait.h>wait4on <sys/wait.h>waiton <sys/wait.h>waitpidon <sys/wait.h>staton <sys/stat.h>lstaton <sys/stat.h>fstaton <sys/stat.h>readlineon <readline/readline.h>rl_on_new_lineon <readline/readline.h>rl_replace_lineon <readline/readline.h>rl_redisplayon <readline/readline.h>add_historyon <readlien/history.h>