λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

일상

#009. λͺ¨λ₯΄κ² λ‹€

🌱 λͺ¨λ₯΄κ² λ‹€ (2021.08.07)

- λ­”κ°€λ₯Ό μ•ŒκΈ° 이전에 λͺ¨λ₯΄λŠ” 게 있고, λ™μ‹œμ— λͺ¨λ₯΄κΈ° 이전에 μ•Œ 것이 μžˆλ‹€. λͺ¨λ₯΄λŠ” 것과 μ•„λŠ” 것은 λˆ„κ°€ λ¨Όμ €λž„ 것도 없이 λŠ˜μ–΄κ°„λ‹€. ν•˜μ§€λ§Œ ν”„λ‘œκ·Έλž˜λ°μ„ μ‹œμž‘ν•œ μ΄ν›„λ‘œ κ·Έ λ‘˜ μ‚¬μ΄μ˜ 비쀑은 ꡳ이 λΉ„κ΅ν•˜μ§€ μ•Šμ•„λ„ λͺ¨λ₯΄λŠ” 것이 압도적이닀. κ·Έλ ‡λ‹€λ©΄ λ‚˜λŠ” μ˜€λŠ˜λ„ μ—΄μ‹¬νžˆ λͺ°λΌκ°€κ³  μžˆλ‹€κ³  ν‘œν˜„ν•˜λŠ” 것이 μ˜¬λ°”λ₯΄μ§€ μ‹Άλ‹€. 사싀 μ§€κΈˆ λ‚΄κ°€ 무슨 말을 ν•˜κ³  μžˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€.

κ°œλ°œμ€ μž‘μ—…μ΄κ³  μž‘μ—…μ€ 일상이고 일상은 개발이고 κ°œλ°œμ€...


🌱 였늘의 이슈

- λŠ˜μ–΄λ§Œκ°€λŠ” μž„μ‹œμž‘μ„±κΈ€κ³Ό κ·Έ μ•ˆμ— μ‹€ν—˜ λͺ©λ‘λ“€.
- μˆ˜μ •λœ μ½”λ“œλ“€μ˜ μ •μƒμž‘λ™ 확인 및 문제점 μž¬ν™•μΈ
- μ½”λ‘œλ‚˜λ‘œ μΈν•œ ν΄λŸ¬μŠ€ν„° μΆœμž…μ œν•œ 2μ£Ό μ—°μž₯ (4단계)

🌱 μ§„ν–‰ 쀑인 ν”„λ‘œμ νŠΈ (projects in progress)

- minishell (with sungclee)πŸ“‹
- inception πŸ“‹

 


🌱 ν”„λ‘œμ νŠΈ (minishell)

πŸ“‹ 자체 리뷰 κ²°κ³Ό.

1. μ˜€κ°œλ…
- bashν™˜κ²½μ— μ •ν™•ν•œ μ›€μ§μž„μ— λŒ€ν•œ 이해도가 λΆ€μ‘±ν–ˆλ‹€. κΈ°λ³Έ 이해λ₯Ό λ°”νƒ•μœΌλ‘œ ν•˜λŠ” bash의 μ›€μ§μž„λ“€μ— λŒ€ν•΄μ„œ 잘λͺ»λœ κ°œλ…μ„ μ½”λ“œμ— 많이 λ°˜μ˜ν–ˆμ—ˆλ‹€.

2. 동적 ν• λ‹Ή
- νž™ μ˜μ—­μ— λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  μ‚¬μš©ν•˜λŠ” λŒ€μ— μžˆμ–΄μ„œ κ°€μš© ν•¨μˆ˜λ“€μ„ μ •ν™•νžˆ μ΄ν•΄ν•˜μ§€ μ•Šμ•„μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜μ˜€λ‹€. 같은 λͺ…령에 λŒ€ν•΄μ„œ 같은 κ²°κ³Όκ°€ λ„μΆœλ˜μ–΄μ•Ό ν•˜λŠ” 게 μΌλ°˜μ μ΄μ§€λ§Œ 반볡적으둜 같은 λͺ…령을 μˆ˜ν–‰ν•  λ•Œ 결괏값이 λ‹¬λΌμ§€λŠ” λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.

3. μ• λ§€λͺ¨ν˜Έ
- λ™λ£Œμ™€ μ œμž‘κΈ°μ€€κ³Ό λ²”μœ„λ₯Ό λͺ…ν™•νžˆ ν•˜μ§€ λͺ»ν•œ κ²ƒμ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έλ“€μ΄ κ²°κ΅­ λ§ˆμ§€λ§‰ μ„œλ‘œ μΆ©λŒμ„ μΌμœΌμΌ°λ‹€.


πŸ“‹ 문제 ν•΄κ²° case01, "cat < test.txt | invalid_cmd > result.txt"

μœ νš¨ν•˜μ§€ μ•Šμ€ λͺ…λ Ήμ–΄(invalid_cmd)κ°€ νŒŒμ΄ν”„λΌμΈ 뒀에 μ‘΄μž¬ν•œλ‹€. μ• λ§€λͺ¨ν˜Έν•œ κΈ°μ€€μœΌλ‘œ μž‘μ„±λœ 각자의 κΈ°λŠ₯듀이. μž…μΆœλ ₯ μ²˜λ¦¬λ°©μ‹κ³Ό 닀쀑 νŒŒμ΄ν”„ λ‘œμ§μ— λŒ€ν•œ 적용 방식에 μΆ©λŒμ„ 일으켜 λ‹€μŒ νŒŒμ΄ν”„μ— 같은 논리가 μ μš©λ˜μ§€ λͺ»ν–ˆμ—ˆκ³  이λ₯Ό μˆ˜μ •ν•˜μ˜€λ‹€.

# bashν™˜κ²½ : result.txtλ₯Ό μƒˆλ‘œ μƒμ„±ν•œλ‹€.
bash-3.2$ cat < test.txt | invalid_cmd > result.txt
bash: invalid_cmd: command not found
bash-3.2$ ls result.txt result.txt

# minishellν™˜κ²½ : μ²˜λ¦¬κΈ°μ€€μ„ λͺ…ν™•νžˆν•˜κ³  각각 같은 원리가 λ°˜μ˜λ˜λ„λ‘ μˆ˜μ •ν•˜μ˜€λ‹€.
minishell-1.0 %% cat < test.txt | invalid_cmd > result.txt
minishell: invalid_cmd: command not found
minishell-1.0 %% ls result.txt result.txt


πŸ“‹ 문제 ν•΄κ²° case02, "cat < a.txt > b.txt >> < c.txt < test.txt"

쀑간에 μž…μΆœλ ₯ μΈμžκ°€ μ˜¬λ°”λ₯΄μ§€ μ•Šλ‹€. 이럴 경우 토큰 μ—λŸ¬κ°€ λ°œμƒλ˜λŠ”λ° ν† ν°μ—λŠ” μ€‘λ³΅λœ μž…μΆœλ ₯에 λŒ€ν•΄ μ–΄λ– ν•œ κ·œμΉ™μ„±λ„ λ¬΄μ‹œλ˜λŠ” 게 λ§žμ§€λ§Œ λ‚˜λŠ” κ·œμΉ™μ„±μ„ λ”°λ₯΄λ„둝 μž‘μ„±ν–ˆμ—ˆκ³  이λ₯Ό μˆ˜μ •ν•˜μ˜€λ‹€. (μ˜€κ°œλ…)

# μ‹€ν—˜μ€€λΉ„. minishell-1.0 %% cat test.txt klist
minishell-1.0 %% cat a.txt aaaaa
minishell-1.0 %% cat b.txt bbbb
minishell-1.0 %% cat c.txt ccccccc

# 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 bbbb # ν† ν°μ—λŸ¬μ— λŒ€ν•΄μ„œ κ·œμΉ™μ„±μ„ λ¬΄μ‹œ.

# 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 bbbb # ν† ν°μ—λŸ¬μ— λŒ€ν•΄μ„œ κ·œμΉ™μ„±μ„ λ¬΄μ‹œ.


πŸ“‹ 문제 ν•΄κ²° case03, "wc > a.txt << ENDA | cat > b.txt >> c.txt << ENDB"

μ—‰λš±ν•œ 좜λ ₯ 결과와 μΌμ •ν•˜μ§€ μ•Šμ€ κ²°κ³Όλ₯Ό λ³΄μ˜€λ˜ case03μ—μ„œ 동적 ν• λ‹Ή λ¬Έμ œμ™€ λ‹€μ‹œκΈˆ μ˜€κ°œλ…μ„ 확인할 수 μžˆμ—ˆλ‹€.νžˆμ–΄λ„νλ¨ΌνŠΈμ˜ μž…λ ₯을 좜λ ₯νŒŒμΌμ— λ„˜κ²¨μ£ΌλŠ” 상황을 λͺ…λ Ήμ–΄μ˜ κ²°κ³Όκ°€ μ•„λ‹Œ μž…λ ₯을 κ·ΈλŒ€λ‘œ μ „λ‹¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ‘œμ§μ„ μž‘μ„±ν•˜μ˜€κ³ , 마치 μ–΄λ– ν•œ λͺ…령에도 cat이 μž‘λ™ν•œ 것과 같은 결과둜 μ΄μ–΄μ‘Œλ‹€. λͺ…λ Ήμ–΄ 인자λ₯Ό κ·œμΉ™μ— 맞게 μž¬ν• λ‹Ήν•˜λŠ” κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ μžˆμ–΄μ„œ 좜λ ₯κ²°κ³Όκ°€ ν•œ λ²ˆμ”© λ‹¬λΌμ§€λŠ” λ¬Έμ œκΉŒμ§€ κ°€μ§€κ³  μžˆμ—ˆκ³ , μœ„μ˜ λ‚΄μš©λ“€μ„ μˆ˜μ •ν•˜μ˜€λ‹€.

# bash
bash-3.2$ wc > a.txt << ENDA | cat > b.txt >> c.txt << ENDB
> abcdefg
> ENDA
> hi
> ENDB
bash-3.2$ cat a.txt
1 1 8                          # νŒŒμ΄ν”„ 이전 첫번째 νžˆμ–΄λ…μ˜ 좜λ ₯반영
bash-3.2$ cat b.txt            # νŒŒμ΄ν”„ 이후 쀑간 좜λ ₯에 λŒ€ν•œ κ·œμΉ™μ„±μ μš©
bash-3.2$ cat c.txt ccccccc hi # νŒŒμ΄ν”„ 이후 좜λ ₯에 λŒ€ν•œ κ·œμΉ™ 및 μž…λ ₯반영

# minishell
minishell-1.0 %% wc > a.txt << ENDA | cat > b.txt >> c.txt << ENDB
> 123
> ENDA
> 123456789
> ENDB
minishell-1.0 %% cat a.txt
1 1 4 γ…€                                         # νŒŒμ΄ν”„ 이전 첫번째 νžˆμ–΄λ…μ˜ 좜λ ₯반영
minishell-1.0 %% cat b.txt                      # νŒŒμ΄ν”„ 이후 쀑간 좜λ ₯에 λŒ€ν•œ κ·œμΉ™μ„±μ μš©
minishell-1.0 %% cat c.txt ccccccc hi 123456789 # νŒŒμ΄ν”„ 이후 좜λ ₯에 λŒ€ν•œ κ·œμΉ™ 및 μž…λ ₯반영

'일상' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

#011. 운이 μ’‹μ•˜μ§€  (0) 2021.08.17
#010. μ•„μΉ¨ν˜•μΈκ°„  (0) 2021.08.11
#008. λ―Έλ‹ˆμ…Έμ˜ λ³€ν˜•  (0) 2021.08.05
#007. λ―Έλ‹ˆμ…Έμ˜ κΈ°λ³Έ  (0) 2021.08.04
#006. μ˜€ν”„λΌμΈκ³Ό ν˜‘μ—…  (0) 2021.08.02