명령어 실행 원리
→ 리다이렉션(reditrection)이라는 것을 볼 거임.
→ 우리는 zsh을 사용하는데 bash으로 test 해보는 것을 추천
- 밑 부분에 설명을 할 때 zsh와 bash차이를 적으면서 보여주겠다.
- zsh와 bash의 차이점
- 우리가 유닉스 운영체제 시스템에서 기본적인 셸은 Bash로 설치된다. 그래서 좀 더 기본적인 틀에 맞추고자 Bash를 추천하며 zsh할 경우 bash와 다른 결과값이 나올 수도 있다. 또한 과제에서 $가 들어가있기 때문에 bash로 하는 것이 더 좋다
Zsh (Z Shell)과 Bash (Bourne Again Shell)은 둘 다 Unix 및 Unix-like 운영 체제에서 사용되는 대화형 셸(Shell) 프로그램
- 호환성: Bash는 기본적으로 대부분의 Unix 및 Unix-like 시스템에서 기본 셸로 사용되는 반면, Zsh는 일반적으로 선택적으로 설치되거나 사용자가 직접 설정. 그러나 대부분의 시스템에서 Zsh를 설치하고 기본 셸로 사용하는 것도 가능합니다.
- 확장성: Zsh는 Bash에 비해 더 많은 기능과 확장성을 제공. Zsh에는 기본적으로 다양한 기능이 내장되어 있으며, 사용자 정의 플러그인, 자동 완성, 테마 등을 사용하여 사용자 정의를 쉽게 가능. 이러한 기능은 개발자나 전문 사용자에게 특히 유용.
- 자동 완성: Zsh는 Bash에 비해 더 강력하고 유연한 자동 완성 기능을 제공. 예를 들어, Zsh는 파일 경로, 명령어, 옵션 등에 대한 자동 완성을 제공하며, 사용자 정의 완성 스크립트를 작성하여 자신의 자동 완성 규칙을 추가 가능.
- 명령어 수정: Zsh는 입력한 명령어를 수정하는 기능을 제공. 예를 들어, 이전에 실행한 명령어를 자동으로 수정하거나, 명령어의 일부를 수정하거나 복사하여 쉽게 재사용 가능. 이 기능은 효율적인 작업 흐름을 구축하는 데 도움이 된다.
- 쉘 스크립트 언어의 차이: Zsh와 Bash는 다소 다른 쉘 스크립트 언어를 사용합니다. 일부 특정 구문 및 기능에서 차이가 있을 수 있으므로 쉘 스크립트를 작성할 때 이러한 차이에 주의.
예제를 통해 보자
현재 command_exam폴더

Redirection >
- outfile
bash
- 입력을 기다리지 않고 끝난다.

zsh
- 입력 스트림 stdin
- 출력 스트림 outfile
- 입력을 기다린다. user가 입력을 모두 해주고 eof로 표준 입력을 종료하면 끝남

2. ls > outfile
- outfile이 생성이되며 현재 폴더에서 ls한 내용이 oufile에 들어가게 됨.
bash

zsh

Redirection >>
- ls -l >> outfile
- ls -l을 한 것을 outfile 제일 마지막에 추가해주자
bash

zsh

Redirection <
- grep A < outfile
- outfile에 A가 있는 친구들은 모드 출력해줘 라는 말
bash

zsh

2. < outfile
- 입력 스트링을 outfile로 설정

zsh
- < outfile이라고 하면 file 내용이 입력 버퍼에 들어가 있는 상태가 됨.
- zsh는 입력 버퍼에 들어가서 실행되기 때문에 이런 결과물이 보임.

Redirection <<
<<을 들어가기 전 heredoc이 무엇인지 알아야한다.
→ here document, here-document, heredoc, hereis, here-string, here-script
**히어 문서, 히어 도큐먼트, 히어 다큐먼트, 히어 문자열, 히어닥**
- 문자열을 쉘스크립트나 프로그래밍 언어 중에 그대로 포함시키기 위한 방법
- << 뒤에 식별자를 선언하고 원하는 문자열을 쓴 후에 식별자로 끝내면 된다.
- 지원환경·언어: UNIX 계열 쉘스크립트(sh, csh, ksh, bash, zsh), Perl, PHP, Python, Ruby 등
- Bash 및 Zsh와 같은 다른 셸에서 Here 문서(Heredoc)는 명령에 여러 줄의 입력을 전달할 수 있는 리디렉션 유형.
좀 더 쉽게 말 해보자
- 식별자가 입력으로 들어올 때까지 입력을 넣어주면 그때까지 넣어준 입력이 입력 스트림으로 들어온다.
이 예시들은 bash로만 하는 것을 추천 기본적인 bash의 heredoc을 보자
→ 작성자 예시는 bash
예시 1
cat << EOF
- EOF : End of Text라는 의미로 이 자리는 입력을 종료 받는 식별자 자리라서 아무거나 들어와도 됨.
bash-3.2$ cat << EOF
> The current working directory is: $PWD
> You are logged in as: $(whoami)
> EOF
결과
bash-3.2$ cat << EOF
> The current working directory is: $PWD
> You are logged in as: $(whoami
> EOF
The current working directory is: /Users/jaeyojun
You are logged in as: jaeyojun
bash-3.2$
예시 2
cat <<- "EOF"
bash-3.2$ cat <<- "EOF"
> The current working directory is: $PWD
> You are logged in as: $(whoami)
> EOF
결과
- 구분 기호가 따옴표로 묶이면 매개 변수 확장 및 명령 대체가 셸에서 수행되지 않는다.
The current working directory is: $PWD
You are logged in as: $(whoami)
pipex subject
< file1 cmd1 | cmd2 > file2
리다이렉션
<: 지정된 파일의 내용을 표준 입력으로 넘긴다.
>: 표준 출력으로 넘어온 내용을 지정된 파일로 넘긴다.
해석
- < 기호의 앞에는 0(표준 입력)이 생략되어 있다고 보면 됨.
file1의 내용을 표준 입력으로 넘기고, cmd1을 실행. cmd1의 출력 스트림을 파이프를 통해 cmd2의 표준 입력으로 넘긴다. cmd2의 출력 스트림을 file2에 넘긴다.
pipex bonus
- file의 내용을 표준 입력으로 넘기고 파이프 실행 하여 file2에 넘김
$> ./pipex file1 cmd1 cmd2 cmd3 ... cmdn file2
< file1 cmd1 | cmd2 | cmd3 ... | cmdn > file2
- LIMITER가 나올 때까지 입력을 받는다. cmd 명령어를 실행한 후 그것을 파이프를 통해 cmd1실행하고 file 내용 제일 뒤에 넣어준다.
$> ./pipex here_doc LIMITER cmd cmd1 file
cmd << LIMITER | cmd1 >> file
Linux : Bash Heredoc 사용 방법, 예제, 명령어
Linux : Bash Heredoc 사용 방법, 예제, 명령어
셸 스크립트를 작성할 때 tee, cat 또는 sftp와 같은 대화형 명령어에 텍스트 또는 코드의 여러 줄 블록을 전달해야 하는 상황에 놓일 수 있습니다. Bash 및 Zsh와 같은 다른 셸에서 Here 문서(Heredoc)는
jjeongil.tistory.com
[리눅스] 명령 실행 원리 3 : I/O 리다이렉션
[리눅스] 명령 실행 원리 3 : I/O 리다이렉션(Redirection) 1. I/O 리다이렉션 소개 이번 리눅스 명령 실행 원리 포스트에서 마지막으로 다룰 주제는 바로 리다이렉션(redirection)이다. 앞서 보았던 포스트
architectophile.tistory.com
[Pipex] redirection, here document 이해하기
[Pipex] redirection, here document 이해하기
Redirection 이란? linux에서 Input/Output(I/O) redirection은 command를 실행할 때 standard input와 standart output을 바꿀 수 있도록 해주는 기능이다. standard input은 표준 입력을 의미하고
velog.io
'42Seoul > pipex' 카테고리의 다른 글
pipe(), unlink() (0) | 2023.09.13 |
---|---|
access() (0) | 2023.09.13 |
dup, dup2 (0) | 2023.09.13 |
execve() (0) | 2023.09.13 |
프로세스 통신(IPC) (0) | 2023.09.13 |