๋ฐ˜์‘ํ˜•

์…ธ ๊ณตํ†ต ๊ธฐ๋Šฅ


๋ผ์ธ ํŽธ์ง‘ ๋‹จ์ถ•ํ‚ค

Ctrl + W : ์ปค์„œ ์•ž ๋‹จ์–ด ์ž˜๋ผ๋‚ด๊ธฐ

# Before
Excepteur sit est non sed excepteur in commodo.|
# After
Excepteur sit est non sed excepteur in |

 

Ctrl + U : ์ปค์„œ๋ถ€ํ„ฐ ์ค„ ์‹œ์ž‘๊นŒ์ง€ ์ž˜๋ผ๋‚ด๊ธฐ

# Before
Excepteur sit est non sed excepteur in commodo.|
# After (์ปค์„œ ์•ž ๋‚ด์šฉ ๋‹ค ์ง€์›Œ์ง)
|

 

Ctrl + K : ์ปค์„œ๋ถ€ํ„ฐ ์ค„ ๋๊นŒ์ง€ ์ž˜๋ผ๋‚ด๊ธฐ

# Before
Excepteur |sit est non sed excepteur in commodo.
# After
Excepteur |

 

Ctrl + Y : ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ž˜๋ผ๋‚ธ ๋‚ด์šฉ ๋ถ™์—ฌ๋„ฃ๊ธฐ

# Before
Excepteur sit est non sed excepteur in |
# After
Excepteur sit est non sed excepteur in commodo.|

 

Ctrl + A : ์ค„ ๋งจ ์•ž์œผ๋กœ ์ด๋™

# Before
Excepteur sit est non sed excepteur in commodo.|
# After
|Excepteur sit est non sed excepteur in commodo.

 

Ctrl + E : ์ค„ ๋งจ ๋์œผ๋กœ ์ด๋™

# Before
|Excepteur sit est non sed excepteur in commodo.
# After
Excepteur sit est non sed excepteur in commodo.|

 

Alt + B : ๋‹จ์–ด ๋‹จ์œ„๋กœ ๋’ค๋กœ ์ด๋™

# Before
Excepteur sit est non sed excepteur in commodo.|
# After
Excepteur sit est non sed excepteur in |commodo.

 

Alt + F : ๋‹จ์–ด ๋‹จ์œ„๋กœ ์•ž์œผ๋กœ ์ด๋™

# Before
Excepteur |sit est non sed excepteur in commodo.
# After
Excepteur sit |est non sed excepteur in commodo.

 

ํ„ฐ๋ฏธ๋„ ๋ณต๊ตฌ

๊ธ€์ž๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฑฐ๋‚˜, ์ค„๋ฐ”๊ฟˆ์ด ์ด์ƒํ•ด์ง€๊ฑฐ๋‚˜, ํ™”๋ฉด ํ‘œ์‹œ๊ฐ€ ๊นจ์กŒ๊ฑฐ๋‚˜, ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด์„œ ํ„ฐ๋ฏธ๋„ ์ƒํƒœ๊ฐ€ ๊ผฌ์˜€์„ ๋•Œ ์œ ์šฉํ•œ ๋ณต๊ตฌ ๋ช…๋ น์–ด.

# ํ„ฐ๋ฏธ๋„ ์ƒํƒœ ์ดˆ๊ธฐํ™”
reset
# ํ„ฐ๋ฏธ๋„ ์ž…๋ ฅ ์„ค์ • ๋ณต๊ตฌ
stty sane

 

๊ธด๊ธ‰ ์ œ์–ด

  • Ctrl + C : ํ˜„์žฌ ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น ์ค‘๋‹จ
  • Ctrl + D : EOF(End of File; ๋” ์ด์ƒ ์ž…๋ ฅํ•  ๋‚ด์šฉ ์—†์Œ) ์ „์†ก. cat์ฒ˜๋Ÿผ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ python ๊ฐ™์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.

 

ํ™”๋ฉด ์ •๋ฆฌ

  • Ctrl + L : ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด ์ •๋ฆฌ
  • macOS ํ„ฐ๋ฏธ๋„์—์„  Command + K ๋‹จ์ถ•ํ‚ค๋กœ๋„ ๊ฐ€๋Šฅ

 

๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™

  • cd - : ๋ฐ”๋กœ ์ด์ „ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™
  • pushd [๊ฒฝ๋กœ] : ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•˜๊ณ  ์ง€์ •ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™
  • popd : ์ €์žฅํ•ด ๋‘” ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณต๊ท€ (๋””๋ ‰ํ„ฐ๋ฆฌ ์Šคํƒ์˜ ๋งจ ์œ„ ๊ฒฝ๋กœ)

 

ํŒŒ์ผ ๋น„์šฐ๊ธฐ

> ํŒŒ์ผ๋ช… : ํŒŒ์ผ์€ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋‚ด์šฉ๋งŒ ๋น„์›€

echo "Hello World" > hello.txt
cat hello.txt
# Hello World

> hello.txt
cat hello.txt
# (๋‚ด์šฉ์—†์Œ)

 

์ด์ „ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž ์žฌ์‚ฌ์šฉ

$_ : ์ง์ „ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž ์ฐธ์กฐ (ํžˆ์Šคํ† ๋ฆฌ์—๋Š” ๊ฐ’ ๋…ธ์ถœ ์—†์ด $_ ์œผ๋กœ ๊ธฐ๋ก๋จ, ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

mkdir -p project/src
cd $_
pwd
# project/src

 

์…ธ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์ „ ์žฅ์น˜

  • set -e : ๋ช…๋ น ์‹คํŒจ ์‹œ ์Šคํฌ๋ฆฝํŠธ ์ข…๋ฃŒ
  • set -u : ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์‹œ ์—๋Ÿฌ
  • set -o pipefail : ํŒŒ์ดํ”„๋ผ์ธ ์ค‘๊ฐ„ ๋ช…๋ น์„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด๋ฅผ ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌ

 

 

Bash / Zsh ๊ธฐ๋Šฅ


ํžˆ์Šคํ† ๋ฆฌ ๊ฒ€์ƒ‰

Ctrl + R : ์ด์ „์— ์‹คํ–‰ํ•œ ๋ช…๋ น์„ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ฒ€์ƒ‰

 

๋ช…๋ น ์žฌ์‚ฌ์šฉ

!! : ์ง์ „ ๋ช…๋ น์–ด ๋‹ค์‹œ ์‹คํ–‰

pwd 
# /Users/me/project
!!
# pwd
# /Users/me/project

 

์—๋””ํ„ฐ๋กœ ๋ช…๋ น ํŽธ์ง‘

Ctrl + X, Ctrl + E : ํ˜„์žฌ ์ž…๋ ฅ ์ค‘์ธ ๋ช…๋ น์„ ์—๋””ํ„ฐ๋กœ ์—ด๊ธฐ

# ํ„ฐ๋ฏธ๋„์— ๊ธด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋‹ค๊ฐ€...
git commit -m "fix: adjust shell shortcut docs and add editor examples"

# Ctrl + X, Ctrl + E ๋‹จ์ถ•ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด
# ์ž…๋ ฅ ์ค‘์ด๋˜ ๋‚ด์šฉ์ด ์—๋””ํ„ฐ์—์„œ ์—ด๋ฆผ
# ์—๋””ํ„ฐ์—์„œ ์ˆ˜์ •ํ•œ ๋’ค ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋ฉด
# ์ˆ˜์ •๋œ ๋‚ด์šฉ์ด ํ„ฐ๋ฏธ๋„ ์ž…๋ ฅ์ฐฝ์— ๋ฐ˜์˜๋จ

 

fc : ์ด์ „ ๋ช…๋ น์„ $EDITOR์—์„œ ํŽธ์ง‘

# ์ง์ „์— ์‹คํ–‰ํ•œ ๋ช…๋ น
git rebase -i HEAD~5

# ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
fc

# ๋ฐฉ๊ธˆ ์‹คํ–‰ํ•œ ๋ช…๋ น์ด ์—๋””ํ„ฐ์—์„œ ์—ด๋ฆผ
# HEAD~10์œผ๋กœ ๊ณ ์นœ ๋’ค ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋ฉด
# ์ˆ˜์ •ํ•œ ๋ช…๋ น์ด ๋‹ค์‹œ ์‹คํ–‰๋จ

 

์ด์ „ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž ๊ฐ€์ ธ์˜ค๊ธฐ

Esc + . ๋˜๋Š” Alt + . : ์ง์ „ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž๋ฅผ ํ˜„์žฌ ์ปค์„œ ์œ„์น˜์— ์‚ฝ์ž…

mkdir -p project/src
cd 
# ์—ฌ๊ธฐ์„œ Alt + .
# project/src ๊ฐ€ ์ž๋™์œผ๋กœ ์ž…๋ ฅ๋จ

 

!$ : ์ง์ „ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž ์ฐธ์กฐ (ํžˆ์Šคํ† ๋ฆฌ์—๋Š” ์‹ค์ œ ๊ฐ’์œผ๋กœ ์น˜ํ™˜๋˜์–ด ๊ธฐ๋ก๋จ, ์…ธ ์ „์šฉ)

mkdir -p project/src
cd !$
pwd
# project/src

 

์ค‘๊ด„ํ˜ธ ํ™•์žฅ (Brace Expansion)

{} ์•ˆ์— ๊ฐ’์ด๋‚˜ ๋ฒ”์œ„๋ฅผ ๋„ฃ์–ด ์—ฌ๋Ÿฌ ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ. ์‰ผํ‘œ(,)๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋‚˜์—ดํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , .. ๋Š” ์—ฐ์†๋œ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

echo file{1,2,3}.txt
# file1.txt file2.txt file3.txt

mkdir -p project/{src,dist,public}
# project/src project/dist project/public ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ

echo {1..5}
# 1 2 3 4 5

echo {a..d}
# a b c d

 

ํ”„๋กœ์„ธ์Šค ์น˜ํ™˜ (Process Substitution)

๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ์„ ์ž„์‹œ ํŒŒ์ผ์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ. <(๋ช…๋ น์–ด)๋Š” ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์ฒ˜๋Ÿผ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ (read), >(๋ช…๋ น์–ด)๋Š” ์ถœ๋ ฅ์„ ํŒŒ์ผ์— ์“ฐ๋“ฏ(write) ๋‹ค๋ฅธ ๋ช…๋ น์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

# ์ž„์‹œ ํŒŒ์ผ ์ƒ์„ฑ ์—†์ด, ๋‘ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ชฉ๋ก ์ฐจ์ด๋ฅผ ๋ฐ”๋กœ ๋น„๊ต
diff <(ls dirA) <(ls dirB)

# ๊ฐ ๋ช…๋ น์–ด์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ…์ŠคํŠธ ํŒŒ์ผ์ฒ˜๋Ÿผ ์ด์–ด์„œ ์ถœ๋ ฅ
cat <(echo "hello") <(echo "world")
# hello
# world

# app.log ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋ฉด์„œ ERROR ์ค„๋งŒ error.log์— ์ €์žฅ
tee >(grep "ERROR" > error.log) < app.log
# tee: ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด(stdout)๊ณผ ๋‹ค๋ฅธ ์ถœ๋ ฅ ๋Œ€์ƒ์œผ๋กœ ๋™์‹œ์— ๋ณด๋ƒ„
# ํ๋ฆ„: app.log ์ฝ๊ธฐ → ํ™”๋ฉด์— ์ „์ฒด ์ถœ๋ ฅ → ๋™์‹œ์— grep์œผ๋กœ ๋„˜๊ฒจ ERROR๋งŒ ๋”ฐ๋กœ ์ €์žฅ

 

๊ธ€๋กœ๋ธŒ ํŒจํ„ด (Glob Pattern)

ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ํŒจํ„ด์œผ๋กœ ๋งค์นญํ•˜๋Š” ๊ธฐ๋Šฅ. *๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ˆ˜์ค€์—์„œ ๋งค์นญํ•˜๊ณ , **๋Š” ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค. bash์—์„œ **๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด shopt -s globstar ๋ช…๋ น์–ด๋กœ globstar ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค. zsh์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ **๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

# ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ .js ํŒŒ์ผ ์ถœ๋ ฅ
echo *.js

# ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๋ชจ๋“  ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ .js ํŒŒ์ผ ์ถœ๋ ฅ
echo **/*.js

# ๋ชจ๋“  ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ .md ํŒŒ์ผ ์ถœ๋ ฅ
ls **/*.md

# src์˜ ๋ชจ๋“  ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ .ts ํŒŒ์ผ์„ ์ฐพ์•„ dist๋กœ ๋ณต์‚ฌ
cp src/**/*.ts dist/

 

์ž‘์—… ์ œ์–ด (Job Control)

์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ. Ctrl + Z ๋‹จ์ถ•ํ‚ค๋กœ ํ˜„์žฌ ํฌ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ผ์‹œ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ๊ณ , bg ๋ช…๋ น์–ด๋กœ ์ค‘์ง€ํ•œ ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ๋‹ค์‹œ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ๊ฐ€์ ธ์˜ฌ ๋• fg๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ˜„์žฌ ์…ธ์ด ๊ด€๋ฆฌ ์ค‘์ธ ์ž‘์—… ๋ชฉ๋ก์€ jobs๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ„ฐ๋ฏธ๋„์„ ์ข…๋ฃŒํ•ด๋„ ์ž‘์—…์„ ๊ณ„์† ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋ ค๋ฉด ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ณด๋‚ธ ๋’ค disown ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. disown์€ ํŠน์ • ์ž‘์—…์„ ์…ธ ์ž‘์—… ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•ด์„œ ์…ธ ์ข…๋ฃŒ ์‹œ ์ „์†ก๋˜๋Š” SIGHUP ์‹œ๊ทธ๋„(์—ฐ๊ฒฐ์ด ๋Š๊ฒผ๋‹ค๊ณ  ์•Œ๋ฆฌ๋Š” ์‹ ํ˜ธ)์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋งŒ๋“ ๋‹ค.

 

disown์œผ๋กœ ๋ถ„๋ฆฌํ•œ ์ž‘์—…์€ jobs์— ๋” ์ด์ƒ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ps๋‚˜ pgrep์œผ๋กœ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

# ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ผ์‹œ ์ค‘๋‹จ
node server.js
^Z
# [1]+ Stopped node server.js

# ์ค‘๋‹จ๋œ ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ณ„์† ์‹คํ–‰
bg %1
# [1]+ node server.js &

# ํ˜„์žฌ ์ž‘์—… ๋ชฉ๋ก ํ™•์ธ
jobs
# [1]+ Running node server.js &

# ์…ธ์„ ๋‹ซ์•„๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๋„๋ก ์ž‘์—… ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐ
disown %1

 

๐Ÿ’ก ๋ช…๋ น์–ด ๋’ค์— &๋ฅผ ๋ถ™์ด๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

pnpm start:dev &

 

์ถœ๋ ฅ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊ทธ ์ €์žฅ

|&๋Š” ํ‘œ์ค€ ์ถœ๋ ฅ(stdout)๊ณผ ํ‘œ์ค€ ์—๋Ÿฌ ์ถœ๋ ฅ(stderr)์„ ํ•ฉ์นœ ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ „๋‹ฌ(ํŒŒ์ดํ”„)ํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. tee ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ถœ๋ ฅ ๋‚ด์šฉ์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋ฉด์„œ ํŒŒ์ผ๋กœ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

# stdout๊ณผ stderr๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋ฉด์„œ all.log์— ์ €์žฅ
command |& tee all.log

# ๊ธฐ์กด ๋กœ๊ทธ ํŒŒ์ผ ๋์— ์ด์–ด์„œ ์ €์žฅ (-a: append)
command |& tee -a all.log

# ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ๋ณด๋ฉด์„œ ๋กœ๊ทธ ํŒŒ์ผ์—๋„ ์ €์žฅ
pnpm build |& tee build.log

# ์„œ๋ฒ„ ๋กœ๊ทธ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋ฉด์„œ ๊ธฐ์กด ํŒŒ์ผ ๋์— ๊ณ„์† ์ถ”๊ฐ€
pnpm start:dev |& tee -a server.log

 

๐Ÿ’ก |&๋Š” Bash 4+์™€ zsh์—์„œ ์ง€์›ํ•˜๋Š” ๋‹จ์ถ• ๋ฌธ๋ฒ•์œผ๋กœ, 2>&1 | ๋™์ž‘๊ณผ ๋™์ผํ•˜๋‹ค. sh ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๊ตฌํ˜• ํ™˜๊ฒฝ์—์„œ๋Š” 2>&1 |๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

# |& ์™€ ๋™์ผํ•œ ๋™์ž‘
pnpm build 2>&1 | tee build.log

 

 

๋ ˆํผ๋Ÿฐ์Šค


Shell Tricks That Actually Make Life Easier (And Save Your Sanity)

๋ฐ˜์‘ํ˜•