이번 프로젝트는 UNIX 메커니즘을 프로그래밍하여 학습하는 것에 목표를 둔다.
pipex
" 로 설정한다.shell
의 명령과 같은 오류를 처리합니다.access
open
unlink
close
read
write
malloc
waitpid
wait
free
pipe
dup
dup2
execve
fork
perror
strerror
exit
다음과 같은 작업을 하는 프로그램을 작성하라.
./pipex file1 cmd1 cmd2 file2
위의 명령어는 아래의 명령어와 같은 작업을 해야 한다.
< file1 cmd1 | cmd2 > file2
./pipex infile ``ls -l'' ``wc -l'' outfile
# 위의 명령어는 아래의 명령어와 같은 작업을 해야 한다.
< infile ls -l | wc -l > outfile
./pipex infile ``grep a1'' ``wc -w'' outfile
# 위의 명령어는 아래의 명령어와 같은 작업을 해야 한다.
< infile grep a1 | wc -w > outfile
<aside>
💡 ```ls -l''과
"ls -l"` 은 같은 것이 아니다!
''` 를 `" "` 로 해석할 수 있다. 6비트 문자 코드를 쓰던 시절에는 인용 열고 닫기, apostrophe, 강세 표기 등 모두 같은 문자 하나로 표기했다. 그러다 ASCII 가 도입되면서 `'` 와
둘 다 쓸 수 있게 되었고, 인용 열기와 닫기를 구분하게 되었다.
유닉스 man page
에 남아 있는 ```foobar''` 등과 같은 인용 표기는 당시의 흔적이다.
또한 backtick(
)백틱과
single quotation(')작은따옴표 안의 문자열은
shell` 에서 어떠한 명령어의 기능을 수행하지 못한다.
</aside>
echo $SHELL
# /bin/zsh
echo "$SHELL"
# /bin/zsh
echo '$SHELL'
# 아무 것도 출력되지 않음
echo `$SHELL`
# 아무 것도 출력되지 않음
echo ``$SHELL''
# 아무 것도 출력되지 않음