์ผ๋ถ 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