์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ XNUMX๊ฐ€์ง€ Bash ์˜ต์…˜

์ผ๋ถ€ Bash ์˜ต์…˜์€ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฉฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋Œ€๋ณธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๊ธ€์„ ์”๋‹ˆ๋‹ค.

-o xtrace ์„ค์ •

๋””๋ฒ„๊น…์„ ์œ„ํ•ด,

-o errexit ์„ค์ •

์‹ค์ˆ˜๋กœ ๋‚˜๊ฐ€๊ฑฐ๋‚˜

set -o errunset

ํ˜ธ์ถœ๋œ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์˜ต์…˜๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ๋งˆ๋‚˜์Šค์—์„œ ๋„ˆ๋ฌด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ๊ฐ€์žฅ ์œ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : Mac์—๋Š” ์ด๋Ÿฌํ•œ ์˜ต์…˜ ์ค‘ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์ „ ๋ฒ„์ „์˜ bash(3.x๊ฐ€ ์•„๋‹Œ 4.x)๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์—ฌ๊ธฐ์— ๋˜๋Š” ์—ฌ๊ธฐ์—.

set ๋˜๋Š” shopt?

Bash ์˜ต์…˜์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์Šคํฌ๋ฆฝํŠธ์™€ ๋ช…๋ น์ค„ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค set ะธ shopt. ๋‘˜ ๋‹ค ์‰˜์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ(๋‹ค๋ฅธ ์ธ์ˆ˜ ์‚ฌ์šฉ) ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์›. ์˜ต์…˜ set ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ ์‰˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ์ƒ์†๋˜๊ฑฐ๋‚˜ ์ฐจ์šฉ๋˜๋Š” ๋ฐ˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” shopt bash์—์„œ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์˜ต์…˜์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

$ set -o
$ shopt

์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด set ๊ธธ๊ฑฐ๋‚˜ ์งง์€ ๊ตฌ๋ฌธ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

$ set -o errunset
$ set -e

ํšจ๊ณผ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋งˆ์ด๋„ˆ์Šค ๋Œ€์‹  ํ”Œ๋Ÿฌ์Šค๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ set +e

๋…ผ๋ฆฌ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์•„์„œ ์˜ค๋žซ๋™์•ˆ ์ด ๊ตฌ๋ฌธ์„ ๊ธฐ์–ตํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(๋นผ๊ธฐ ๊ธฐํ˜ธ๋Š” ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋”ํ•˜๊ธฐ ๊ธฐํ˜ธ๋Š” ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค).

ะ’ shopt (๋ณด๋‹ค ๋…ผ๋ฆฌ์ ์ธ) ํ”Œ๋ž˜๊ทธ๋Š” ์˜ต์…˜์„ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. -s (์„ค์ •) ๋ฐ -u (์„ค์ •๋˜์ง€ ์•Š์Œ):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

๋””๋ ‰ํ† ๋ฆฌ ๋ณ€๊ฒฝ

๋””๋ ‰ํ† ๋ฆฌ ์ž‘์—…์— ๋„์›€์ด ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1.cdspell

์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด bash๋Š” ์˜คํƒ€๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์ด๋ฆ„์„ ์ž˜๋ชป ์ž…๋ ฅํ•œ ํด๋”๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

๋‚˜๋Š” ์ด ์˜ต์…˜์„ ์ˆ˜๋…„ ๋™์•ˆ ์‚ฌ์šฉํ•ด ์™”์ง€๋งŒ ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ(์•„๋งˆ๋„ XNUMX๋…„์— ํ•œ ๋ฒˆ) ๋งค์šฐ ์ด์ƒํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋‚ ์—๋Š” cdspell ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋งค์ผ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

2. ์ž๋™ CD

๋ณต์ˆ˜ ์‘๋ชจ์˜ ๋น„ํšจ์œจ์„ฑ์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด cd์„ ์„ ํƒํ•˜๋ฉด X ๋ช…๋ น์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ X ํด๋”๋กœ ์ด๋™ํ•˜๋„๋ก ์ด ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ shopt -s autocd
$ abcdefg
$ cd ..

์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉํ•˜๋ฉด ํด๋” ์‚ฌ์ด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

ํด๋” ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. rm -rf * (์˜ˆ, ๊ทธ๋Ÿฐ๋ฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).

3.๋ฐฉํ–ฅ ํ™•์žฅ

์ด๋Š” Tab์„ ๋ˆŒ๋Ÿฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฉ‹์ง„ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

$ shopt -s direxpand
$ ./[TAB]     # ะทะฐะผะตะฝัะตั‚ัั ะฝะฐ...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # ะทะฐะผะตะฝัะตั‚ัั ะฝะฐ...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  ะทะฐะผะตะฝัะตั‚ัั ะฝะฐ...
$ /full/path/to/home/folder

๊นจ๋—ํ•œ ์ถœ๋ ฅ

4. ์ž‘์—… ํ™•์ธ

์ด ์˜ต์…˜์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ณ„์† ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„ธ์…˜ ๋กœ๊ทธ์•„์›ƒ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ข…๋ฃŒํ•˜๋Š” ๋Œ€์‹  ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ž‘์—… ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์‹œ ์ž…๋ ฅํ•˜์„ธ์š”. exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID ะฟั€ะพั†ะตััะฐ ะดะปั ะพะฑะพะปะพั‡ะบะธ
$ sleep 999 &
$ exit
There are running jobs.
[1]+  Running                 sleep 999 &
$ echo $$
68125             # <= ID ะฟั€ะพั†ะตััะฐ ะดะปั ะพะฑะพะปะพั‡ะบะธ ั‚ะพั‚ ะถะต
$ exit
There are running jobs.
[1]+  Running                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= ะฝะฐ ัั‚ะพั‚ ั€ะฐะท ID ะฟั€ะพั†ะตััะฐ  ะธะทะผะตะฝะธะปัั

๋Œ€์ฒด ์ดˆ๊ฐ•๋Œ€๊ตญ

5.๊ธ€๋กœ์Šคํƒ€

์ด ์˜ต์…˜์€ ๋Œ€์ฒด ์ดˆ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ:

$ shopt -s globstar
$ ls **

๊ทธ๋Ÿฌ๋ฉด ์‰˜์€ ๋ชจ๋“  ๋””๋ ‰ํ† ๋ฆฌ์™€ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ•จ๊ป˜ direxpand ๊ณ„์ธต ๊ตฌ์กฐ์˜ ํ•˜์œ„ ํ•ญ๋ชฉ์„ ๋น ๋ฅด๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ทœ์‹๊ณผ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ๊ด€๋œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

์—ฌ๊ธฐ์„œ ํŒจํ„ด์€ ๊ด„ํ˜ธ ์•ˆ์— ๋ฐฐ์น˜๋˜๊ณ  ์ˆ˜์ง ๋ง‰๋Œ€๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

? = ์ฃผ์–ด์ง„ ํŒจํ„ด์ด XNUMX๊ฐœ ๋˜๋Š” XNUMX๊ฐœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค! = ์ฃผ์–ด์ง„ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ ํ‘œ์‹œ * = XNUMX๊ฐœ ์ด์ƒ์˜ ๋ฐœ์ƒ + = XNUMX๊ฐœ ์ด์ƒ์˜ ๋ฐœ์ƒ @ = ์ •ํ™•ํžˆ XNUMX๊ฐœ์˜ ๋ฐœ์ƒ

์‚ฌ๊ณ  ๋ฐฉ์ง€

7. ํžˆ์Šคํ† ๋ฆฌ ํ™•์ธ

์•ฝ์–ด ๊ธฐ๋ก์—์„œ ๋น ๋ฅธ ์‹คํ–‰ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์—๋Š” ์กฐ๊ธˆ ๋ฌด์„œ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. !! ะธ !$.

์˜ต์…˜ histverify ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๊ธฐ ์ „์— Bash๊ฐ€ ๋ช…๋ น์„ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ•˜๋Š”์ง€ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ shopt -s histverify
$ echo !$          # <= ะŸะพ ะฝะฐะถะฐั‚ะธัŽ Enter ะบะพะผะฐะฝะดะฐ ะฝะต ะทะฐะฟัƒัะบะฐะตั‚ัั
$ echo histverify  # <= ะžะฝะฐ ัะฝะฐั‡ะฐะปะฐ ะดะตะผะพะฝัั‚ั€ะธั€ัƒะตั‚ัั ะฝะฐ ัะบั€ะฐะฝะต,
histverify         # <= ะฐ ะฟะพั‚ะพะผ ะทะฐะฟัƒัะบะฐะตั‚ัั 

8. ๋…ธํด๋กœ๋ฒ„

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์‚ฌ๊ณ ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด, ์ฆ‰ ๋ฆฌ๋””๋ ‰์…˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค(>). ๋ฐฑ์—…์ด ์—†์œผ๋ฉด ์žฌ์•™์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ set -ะก ์ด๋Ÿฌํ•œ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€