๋๋ธ ๋ฑ ์ด ์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ sudo๊ฐ ์ฐพ์ง ๋ชปํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ด๋ป๊ฒ๋ ํด์๋ฉ๋๋ค. ์ด๊ฒ์ ์์ค์์ ์ปดํ์ผ๋ fish-shell์ด โโ์๋ Ubuntu 12.04 LTS์์ ๋ฐ์ํฉ๋๋ค.
์๋ฌด ๋ช ๋ น์ด๋ ์คํํฉ๋๋ค.
$ ls
๋ฃจํธ๋ก ์ด์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ ์ค๋ !!
sudo: !!: ๋ช
๋ น์ ์ฐพ์ ์ ์์ต๋๋ค
sudo !!
๋ช
๋ น์ ์ด์ ์ ์คํํ ๋ช
๋ น( ls
)์ ๋ฃจํธ๋ก ์คํํฉ๋๋ค.
๋ํ ์์๋๋ก ์๋ํ๋ bash์ ์ฌํ ๋จ๊ณ์ ๋ฐ๋ผ sudo
๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์๋์ง ํ์ธํ์ต๋๋ค.
๋ํ Mac OS X 10.7์ ์ด์ ๋ฒ์ ์ fish-shell์๋ ์ด ๋ฌธ์ ๊ฐ ์์๊ณ sudo !!
๋ ์์๋๋ก ์๋ํ์ต๋๋ค.
๋ฌธ์ FAQ์์ ๋ ผ์๋ฉ๋๋ค. http://fishshell.com/docs/current/faq.html#faq -history
์ค๋ช ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋๋ ์ญ์ฌ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ ๊ทผ๊ฑฐ๋ฅผ ์ดํดํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ๋ํ ๊ทผ๊ฑฐ์ End and Home ๋์ Ce์ Ca๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ๋ง์ ์ฌ์ฉ์, ํนํ ์์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ !! ๊ทธ๋ฆฌ๊ณ Home ๋ฐ End ํค๊ฐ ์๋ ๋ฉํฑ์์ sudo๋ฅผ ์ ๋ ฅํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค!! Up+C-a+sudo๋ณด๋ค.
๊ธฐ๋ก ๋์ฒด ํ ํฐ์ ๊ธฐ๋ฅ ๋ณต์์ ๊ณ์ ๊ณ ๋ คํ์๊ฒ ์ต๋๊น?
๋๋ฌธ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ !! ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ํธํ๋ค๋ฉด ๋ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํด ๋ณด์ธ์.
function sudo!!
eval sudo $history[1]
end
"sudo!!"๋ก ํธ์ถ๋ฉ๋๋ค.
๋๋ ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ:
function .runsudo --description 'Run current command line as root'
commandline -C 0
commandline -i 'sudo '
commandline -f execute
end
bind \es .runsudo
๊ทธ๋ฐ ๋ค์ MS๋ฅผ ๋๋ฌ sudo๋ฅผ ๋ฐ๋ก ์์ ๋๊ณ ํ์ฌ ๋ช
๋ น์ค์ ์คํํฉ๋๋ค.
๋๋ ์ด ์์ ๋ฅผ ์์ ํ์ฌ ์ด์ ๋ช
๋ น์ค์ ํ์ฌ ๋ช
๋ น์ค์ ๋ฃ๊ณ ์๋ฅผ ๋ค์ด '\e!'์ ๋ฐ์ธ๋ฉํ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ '!!'๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. ์คํ ์ ์ ๋ช
๋ น์ค์ ๋ณด๊ณ ์
๋ฐ์ดํธํ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ง์ง๋ง ๋ช ๋ น์ ์ฝ๊ฐ ๋ณํํ์ต๋๋ค.
function .runsudo --description 'Run current command line as root'
set cursor_pos (echo (commandline -C) + 5 | bc)
commandline -C 0
commandline -i 'sudo '
commandline -C "$cursor_pos"
end
bind \es ".runsudo"
๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ์์ ํ ์คํํ๋ ๋์ ์ปค์ ์์น๋ฅผ ์ ์ฅํฉ๋๋ค.
!$๋ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
function sudo
if test "$argv" = !!
eval command sudo $history[1]
else
command sudo $argv
end
end
์ด๋ค ์ด์ ๋ก !!
๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํ sudo !!
์
๋๋ค.
๊ฐ์ฌ ํด์. sudo๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ์๋นํ ๋ง์ต๋๋ค!! ์ด ๊ตฌ๋ฌธ์ bash ๋ฐ zsh๋ฅผ ํฌํจํ ๋ค๋ฅธ ๋ง์ ์์์ ์ง์๋ฉ๋๋ค. ์ค๋!! ํ ๋ฐ ์ข ๋ฃ ํค๊ฐ ๋ ๋ฉ๋ฆฌ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ฅํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
์์ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก fish-shell์ ํฌํจํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
!! ์ฝ์ด์ ์ ํฉํ ํ๋ณด์ ๋๋ค(#731).
์ ๋ํ ์ง์ง ํํ!! ๋ฐ ๊ด๋ จ ๋จ์ถํค. ๊ทธ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋์์ง ์์ผ๋ฉฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ์ฉ์์๊ฒ ๊ฐ์ธ ์ฒ ํ์ ๋ฐ์ด ๋ฃ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์ด์์ ์ธ ์๋ฃจ์ ์ ๋ํ ๋์ ํ์ฌ ์๊ฐ์ !! ์ฝ์ด(#731)์ฌ์ผ ํ๋ฉฐ ํ์ ๋ช ๋ น(sudo์ ๊ฐ์ด ๋ช ๋ น์ ๋ฐ๋ ๋ช ๋ น)์ ์ง์ํ๊ธฐ ์ํด ํจ์ ์๋ช (#478)์ ๊ตฌํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ์ ๋ช ๋ น ์์น์์ ์ฝ์ด๊ฐ ํ์ฅ๋์ด 'sudo !!' ํ์ฅ๋ฉ๋๋ค.
๋ ์์ ์ถ๊ฐ
์ค๋๋์์๋ ๋ถ๊ตฌํ๊ณ Fish์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ด์ผ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๊ฐ์ง์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ์ถ๊ฐ ๋ช ๋ น์ ๊ฐ๋ ๊ฒ์ด ๋ค๋ฅธ ์ฌ๋์๊ฒ ํด๊ฐ ๋์ง๋ ์์ต๋๋ค. ์ฌ๋๋ค์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ผ์ ํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค.
๋ฐฉ๋ฒ!! ๋๋ถ๋ถ์ ์์์ ๊ตฌํ๋์ด ์ฌ๋์ ๋ค์น๊ฒ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ๋ช ๋ น์ ๊ณ ๋ คํ์ญ์์ค.
echo fish is great!!
bash / zsh / tcsh์์ ์ด๊ฒ์ ์์์น ๋ชปํ ๋์ฐํ ์ผ์ ํ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด !! ๋ง๋ฒ ๊ตฌ๋ฌธ์ ๋๋ค. ์ด๊ฒ์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํผํ๋ ค๊ณ ๋งค์ฐ ์ ์ฐ๋ ์ผ์ข ์ ์ด์ํ ์ํธ ์์ฉ์ ๋๋ค.
๋ด ์ ์์ ๊ตฌํํ๋ ๊ฒ์ด ์์ต๋๋ค !! ๋ง๋ฒ์ ๊ตฌ๋ฌธ์ด ์๋๋ผ ๋ณ์นญ์ผ๋ก. ์ด๊ฒ์ '๋ช ๋ น ์์น'์์๋ง ํน๋ณํ ์์ ์ ์ํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ธ์๋ก ํ์ฅ๋์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํ ๋ฐ๋์งํ ๋ฌผ๊ณ ๊ธฐ์ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ ์งํฉ๋๋ค.
์ด๋ฅผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ ค๋ฉด sudo
๊ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ด์ง๋ง time
, strace
๋ฑ์ด ํฌํจ๋ ํ์ ๋ช
๋ น์ ๋ํด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๊ฐ๋ฅด์ณ์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌผ๊ณ ๊ธฐ๋ ๋ณ์นญ์ ํ์ฅํฉ๋๋ค. ๊ทธ ์์ฒด๋ก ๋ฉ์ง๊ณ ์ ์ฉํ ๊ธฐ๋ฅ์ธ "ํ์ ๋ช
๋ น ์์น"์ ์์ต๋๋ค.
์ ์ํ ์๋ฃจ์
์ sudo echo fish is great!!
๋ฅผ ๊ณ ๋ คํ ๋ ๋ฌด๋์ง๋๋ค. ๋ชจ๋ ๊ตฌ๋ฌธ์ ๋ํด ๋์ผํ ์ฃผ์ฅ์ ํ ์ ์์ต๋๋ค. echo I really like fish (the shell)!
๋ ํผ๋๋์ง ์์ต๋๊น? ๋๋ ๋ํ "ํ์ ๋ช
๋ น" ๋ชฉ๋ก์ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ณ ์ ์ฐ์ฑ์ด ์ค์ด๋ค์ง ์์๊น ๊ฑฑ์ ํฉ๋๋ค.
๋ณ์นญ์ ์ฌ์ฉํ๋ฉด ๋ช
๋ น๋ง ํ์ฅ๋๊ณ ๋ฌผ๊ณ ๊ธฐ๋ ์ด๋ค ์ธ์๊ฐ (ํ์) ๋ช
๋ น์ด๊ณ ์ด๋ค ์ธ์๊ฐ ์๋์ง ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ sudo echo fish is great!!
๋ ๋ง์ง๋ง ๋ช
๋ น ํ์ฅ์ ์ํํ์ง ์๊ณ ๋์ ๋ฆฌํฐ๋ด "great!!"๋ฅผ ์ ๋ฌํฉ๋๋ค. sudo๋ก (๋ฐ๋ผ์ ์์ฝ๋ก). ๋๋ ๊ทธ๊ฒ์ด ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ด๋ผ๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ค๊ณ ๋ฐ ๊ทผ๊ฑฐ๋ ์ฝ์ด(#731) ๋ฐ ๊ธฐ๋ฅ ์๋ช
(#478)์ ๋ํ ์ค๋ช
์ ์ฐธ์กฐํ์ธ์.
SirCmpwn์ ํฌ๊ด์ ์ธ ๊ธฐ๋ฅ ์๋ช ์ ์๊ตฌํ๋ ๊ฒ์ด ๋ณ์นญ ์ ๊ทผ ๋ฐฉ์์ ๋จ์ ์ด๋ฉฐ ๋ค๋ฅธ ๊ตฌ๋ฌธ ์์๊ฐ ํผ๋์ค๋ฝ๋ค๋ ์ ์ ์ณ์ต๋๋ค. ์ค์ํ์ ์์๋ git(#434) ๋๋ ์์ผ๋์นด๋(#967 ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ค๊ดํธ ํ์ฅ์ ์ฑ๊ฐ์ฌ์ด ํฌํจ๋ฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๋ค๋ฅธ ๊ธฐ๋ฅ(์: #354)๊ณผ ์ค๋ณต๋๋ ๊ตฌ๋ฌธ์ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค.
์ด์จ๋ ๊ทธ๊ฒ์ด ์ง์ํ๋ ์ด์ ์ ๋ํ ๋ด ์ฃผ์ฅ์ ๋๋ค !! ๊ธฐ๋ณธ ๊ตฌ๋ฌธ ์์๋ ๊ธ์ง๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌผ๊ณ ๊ธฐ ๊ตฌ๋ฌธ์ ์์ ํ ํ์๊ฐ ์๋ ๋ฐฉ์์ผ๋ก ๋์ ํ ์ ์์ต๋๋ค.
{}
์ ๋น๊ตํ๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๊ณ ๊ธฐ์์ ์ค๊ดํธ๋ ๋ค๋ฅธ ๊ป์ง๊ณผ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ์ฌ๋๋ค์ bash ๋ฐ ์น๊ตฌ์ฒ๋ผ ์๋ํ ๊ฒ์ผ๋ก ์์ํ ๋๋ง ์คํจํฉ๋๋ค. !! ๊ตฌ๋ฌธ์ ๋ค๋ฅธ ์ผ๋ฐ ์๊ณผ ๋์ผํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค. ๋ํ, !! ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ๋งํผ ์์ฃผ ๋ช
๋ น์์ ๋ณผ ๊ฒ์ผ๋ก ์์๋๋ ๊ฒ์ด ์๋๋๋ค. ์ฌ์ค ์ฌ๋๋ค์ด ์๋ํ๊ณ ์คํจํ ํ์๊ฐ ๋ง์ ๊ฑฐ๋ผ ์์ํฉ๋๋ค!! ๋ฌผ๊ณ ๊ธฐ์ ๊ฒฝ์ฐ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ํ์๋ณด๋ค ํจ์ฌ ๋ง์ต๋๋ค!! ๋ช
๋ น์์.
!
๋ ๋ค๋ฅธ ์์์ ํผ๋ํ๊ธฐ ์ฌ์ด๋ฐ, ์ด๋ฐ ์์ผ๋ก ๊ตฌํํ์ง ์์์ผ๋ฉด ๋ ์ข์์ ํ
๋ฐ. ์๋ฅผ ๋ค์ด, http://codegolf.stackexchange.com/a/17776/3103์ "Hello, world!"๋ผ๊ณ ๊ฐ๋จํ๊ฒ ์
๋ ฅํ์ต๋๋ค. !
์ธํด ์คํจํ๋ UNIX ์
ธ๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ(Ridiculous Runtime Errors ์ง๋ฌธ์์). ๊ทธ๊ฒ์ 7๊ฐ์ ์ฐฌ์ฑํ๋ฅผ ์ป์๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ ๋ ์ด ๊ธฐ๋ฅ์ด ๋๋ผ์ธ ์ ์๋ค๊ณ ์์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ !!
์์ฒด๋ ๊ด์ฐฎ์ต๋๋ค. ์ฌ์ฉ์๊ฐ !!
๋ฅผ ํ ํฐ์ผ๋ก ์ฐ๋ ๋น๋๋ ์ผ๋ง๋ ๋ ๊น์? ๊ทธ๋ฐ ๋ค์ ๋ค์ !!
๋ฅผ ์ถ๊ฐํ๋ฉด ๋ค๋ฅธ ๊ธฐ๋ก ๋์ฒด ํจํด์ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ ๊ทธ ์ค ์ผ๋ถ๋ ์ฑ๊ฐ์ค ์ ์์ต๋๋ค.
๋ ์์ ์ ์ถ๊ฐ - ์ด๋ฒ ์ฒซ ์ฃผ๋ง์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ๋ฐ๋์ ์ง์ํด์ผ ํฉ๋๋ค.
๋ ์์ ์ ์ถ๊ฐ - ์ด๊ฒ์ด ํ์ํฉ๋๋ค.
์ด๊ฒ์ ์ํ๋ ์ฌ๋๋ค์ ์ํด ํ ๋ก ์ ์๋ถ๋ถ์์ ์ธ๊ธํ ํจ์์ ๋ฐ์ธ๋ฉ์ ์ผ๋ฐ์ ์ธ sudo !!
๋ณด๋ค sudo
ํ๊ฑฐ๋ ๋ง์ง๋ง ๋ช
๋ น์ sudoํ๋ ๋ ์ฌ์ด ์ํฌํ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋น์ ์ ๊ทธ๋ค์๊ฒ ์๋ํด์ผํฉ๋๋ค. ๋น์ทํ ๋ฐ์ธ๋ฉ์ ๊ฐ๊ธฐ ์ํด ๋ด readline ๋ฐ zsh ๊ตฌ์ฑ์ ๋ค์ ๋ฐฉ๋ฌธํ๊ฒ ๋ง๋ค์์ต๋๋ค.
๊ทธ๊ฒ์ 7๊ฐ์ ํค ์ ๋ ฅ(์ด์ค 2๊ฐ)์ ๋จ์ผ ๋ฐ์ธ๋ฉ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
_๋น์ ์ด_ ์ข์ํ๋ ๊ฒ์ด ๋ฌด์์ด๋ ๊ฐ์ - ์ ๋ง ์ด์ ๊ฐ ์๋์!! ์ง์ํ์ง ์์ต๋๊น? ์ฌ๋๋ง๋ค ์์ ์๊ฒ ๋ง๋ ๊ธฐ๋ฅ์ด ๋ค๋ฅด๊ณ ์ด๋ค ์ฌ๋์ ์์ชฝ ํ์ดํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฆ๊ธธ ์ ์์ง๋ง ๋ง์ ์ฌ๋๋ค์ !!์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฆ๊น๋๋ค. ์์งํ ๋งํด์ ๊ทธ๊ฒ ์ ๋์๊ฐ์? ์ํ์ง ์๋ ๋ถ๋ค์ ์ฌ์ฉํ์ง ์์ผ์ ๋ ๋ฉ๋๋ค.
๋น์ฐํ ๊ตฌํ์ด ์ด๋ ต์ง ์๊ฒ ์ฃ ?...
์, ๋ฌผ๊ณ ๊ธฐ ์คํฌ๋ฆฝํ ๊ณผ ํจ๊ป ํดํนํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง bash ๋๋ ์ ์ฌํ ์ ธ์์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํ์ง _์๋๋๋ค_ ์ด๋ ๋ง์ ์๊ฐ์ ๋งค์ฐ ํธ๋ฆฌํ์ต๋๋ค.
์ฐธ์กฐ ์ ๋ด ๋๊ธ ํ์ง์ด ๋ฐฐ์ฌ์ zsh์๊ฐ (์๋ก์ด ๊ตฌ๋ฌธ ์์๋ก) ๊ทธ๊ฒ์ ๊ทธ๋ฐ ์์ผ๋กํ๊ณ ์๊ฐ ํ ๋ด๊ฐ ์ ๋ด ๊ทผ๊ฑฐ๋ฅผ ๋ค์ด ๋ด ์ ์ ๋ฌผ๊ณ ๊ธฐ ์ฒ ํ์ ์ ์ง ๊ทธ๊ฒ์ ํ ์์๋ ๋ฐฉ๋ฒ์ ๋ํํฉ๋๋ค.
"์์ฝํผ์ฌ ๋๋จํ๋ค!!" '!!'๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. ์ญ์ฌ๊ฐ ์กฐ๊ธ ์ฝํ์ง๋ง ์์ ์ ์ดํดํฉ๋๋ค. ๋จ์ํ "set shell_history advanced" ๋๋ "echo fish is great!!"์ ์ํ์ ๊ฐ์ํ๋ ค๋ ์ฌ๋๋ค์๊ฒ ํ์ฉ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋์ ์ ์ค์ผ์ด์ค '!!' ๋น์ทํ์ง๋ง ์ผ๋ถ ๊ธฐ๋ฅ ํฅ์์ผ๋ก ํผํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด bash๊ฐ ์๋ Mac์์:
$ ์์กฐ ์
๋ฐ์ดํธ
$ ์์กฐ๊ฐ ๊ตฌ์
$ ์์กฐ ๊ฐ์ ธ์ค๊ธฐ !!
๊ทธ๋์ ๋๋ ์ ๋ช
๋ น์ ๋ํด ์ด์ ๋ช
๋ น์ ์ถ๋ ฅ์ ์ด๋ ์ ๋ ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋ฌผ๊ณ ๊ธฐ๋ก ๋๋ ์ด๊ฒ์ ํ ์ ์๋ค:
$ brew fetch (๊ตฌ์ ์์กฐ)
์ด์ ์ธ์ ๊ฐ๋ ๊ทธ๊ฒ์ด ๋ด๊ฐ ์ฌ์ฉํ ์ ์๋ ์ ์์ด ๋ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ ๋ง๋ก ํ์ํ ๊ฒ์ () ๋ธ๋ก ๋ด์์ ๊ธฐ๋ก์ ๊ฒ์ํ ์ ์๋ ๊ฒ์
๋๋ค.
์:
$ ์์กฐ ๊ฐ์ ธ์ค๊ธฐ(bre
๋ถํํ๋ ๋ฌผ๊ณ ๊ธฐ๋ "ํผ๋์ค๋ฌ์ด" ๋ฐฑํฑ ๋์ ํ์ ๋ช ๋ น์ ()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋์ค๋ฌ์ํ์ง๋ง Enter ํค๋ฅผ ๋๋ฅผ ๋๊น์ง ์ค์ ๋ก ๊ทธ๋ ๊ฒ ์ทจ๊ธํ์ง ์์ต๋๋ค. ์ ์ด๋ ๊ทธ๊ฒ์ด ๋ด๊ฐ ๋ณด๋ ๊ฒ์ ๋๋ค.
๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฒซ ๋ฒ์งธ '('(ํ์ ๋ช ๋ น์ด๋ผ๊ณ ๋ ํจ) ์ดํ์ ๊ธฐ๋ก ๊ฒ์์ ํ์ฉํ๋ค๋ฉด ๊ธฐ๋ก ์กฐ์์ด ์๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์ ์์ ์ดํดํ๋ค๋ฉด ์์ชฝ ํ์ดํ๋ฅผ ๋๋ฅด๋ฉด ์ ์ฒด ๋ช ๋ น์ค ๋์ ๊ฐ์ฅ ์์ชฝ ํ์ ๋ช ๋ น ๋ด์์๋ง ๊ธฐ๋ก ๊ต์ฒด๋ฅผ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
:-1:
๋๋ ์ฌ์ ํ ๋จ์ํ bash ์คํ์ผ !!
๊ตฌํ์ ์ง์ํฉ๋๋ค.
๋๋ ๋์ ๋ณด๋ค ํ์ ๋ช ๋ น ์์น์์ ์๋ํ๋ :up_arrow:, Ctrl+p ๋ฐ ๋ช ๋ น ๊ธฐ๋ก ๊ฒ์์ ์ ํธํฉ๋๋ค!!
๋ค๋ฅธ ์์ ์ ์ฒด ํ์คํ ๋ฆฌ API๋ ์ฌ๋๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์ตํ ์ ๋๋ก ํผ๋ ์ค๋ฝ์ต๋๋ค !! ์ด๊ฒ์ผ๋ก๋ถํฐ.
์ณ์. ๊ทธ๊ฒ์ ํธ๋ฆฌํ๊ณ ์๋นํ ์ฝ๊ฒ '!!'๋ฅผ ๋์ฒดํ ๊ฒ์ ๋๋ค. ๋๋ !ํค์๋ ์ฌ์ฉ.
!!
๊ฐ ์ฝ์ด๋ผ๋ ์๊ฐ์ด ์ ๋ง ์ข์ต๋๋ค.
๊ฐ์ฅ ์ต๊ทผ์ ์ผ๊ฐ ๋น๋์ ์ฝ์ด๋ ๋ช ๋ น ์์น์์๋ง ์ฝ์ด๋ฅผ ํ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ๊ฑด๋ ์ด๊ฒ์ ์ด์ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ํ ์ธ์๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ๋ฐ์ดํธ๋ ๊ฒ์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ณผ๋ ํ๊ฐ๋์์ต๋๋ค. sudo cmd
๋๋ eval sudo $cmd
.
@bucaran ์ ํํ !!
์๋์ด๋ฉฐ, ์ด๋ป๊ฒ ๋ด๊ฐ์ ์๋์ ์ผ์น ํ !!
์ cmd
?
๋ง์ง๋ง ๋ช
๋ น์ธ $cmd
๋ผ๋ ๋ณ์๋ฅผ ๋ง๋๋ผ๋ ๋ง์์ด์ ๊ฐ์? ๋ค์ดํฐ๋ธ ๋ณ์๊ฐ ์๋๋๋ค.
๊ฐ์ฌ ํด์
@mdsib ๋ค, ๋ค๋ฅธ ๋ฌธ์ ์์ ์ธ์ ์์น์ ์ฝ์ด๋ฅผ ํ์ฉํ์ง ์๋ ๊ฒ์ ๋ํ ํ ๋ก ์ด ์์๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํฉ๋๋ค. ๊ทธ ๋น์์๋ ๊ทธ๊ฒ์ ๊ตฌํํ์ง ์๋ ๊ฒ์ด ๋ฐ๋์งํ์ต๋๋ค. ์ด๊ฒ์ ํ์คํ ๊ทธ๊ฒ์ ๋ฐ๊ฟ ๊ฒ์ ๋๋ค.
์ด ์ค๋ ๋์์ ์ป์ ์ ์๋ ๊ตํ์ ๊ณง ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ผ๋ ์ ์ด๋ฉฐ ์ด Github ๋ฌธ์ ๋ฅผ ๊ตฌ๋ ์ทจ์ํ๊ณ zsh๋ก ์ ํํด์ผ ํฉ๋๋ค. ์๋์ค์ค!
์ฌ๊ธฐ์ !!
์ด ์์ด์๊ฐ ์๋๋ผ ์๋นํ ๊ฐ๋จํ ๊ธฐ๋ฅ์ ๋ํ Github ๋ฌธ์ ๊ฐ ์ฒ ํ์ BS๋ก ์ธํด ๊ตฌํ๋์ง ์๊ณ 3๋
๋์ ์ด๋ ค ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ธฐ๋ฅ์ด ๋ณ๋ก ์ค์ํ์ง ์๋ค๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ค๋ํ๋ ค๋ ์ฌ๋๋ค์ ๋ณด๋ ๊ฒ์ ์ฌ๋ฏธ์์ต๋๋ค. ๋ฌผ๋ก , ๋น์ ์ ๊ทธ๊ฒ์ ์ํ์ง ์์ผ๋ฏ๋ก ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋น์ ์ด ํ๋์์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ๋
น์์ ์ข์ํ์ง ์๋๋ก ์ค๋ํ๋ ค๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ "๋จ์ํ" ๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ ์ ์๋ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๋ง์์ ๋ค์ง๋ง ๋ช ๊ฐ์ง๋ฅผ ๋ ์ถ๊ฐํ๊ณ ์ถ์ ์ฌ๋์ ์์ ์ ํฌํฌํด์ผ ํ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ ๋ ๋นจ๋ฆฌ ์ด๋๊ฐ์ ๋์ฐฉํ ๊ฒ ๊ฐ์ต๋๋ค.
~/bin/์ ๋ง๋ค์์ต๋๋ค!! ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค.
#!/bin/fish
eval $history[1]
๋จ๊ธฐ์ ์ผ๋ก๋ ๋๋ฝ๋ ๊ธฐ๋ฅ๊ณผ ์
๋ ฅํ๋ ๊ฒฝํฅ์ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋๋ ๋ํ ~/bin/!vi๋ฅผ ๋ง๋ค์๋ค:
#!/bin/fish
for f in $history
echo $f | grep '^vi'
if test "$status" = "0"
eval $f
exit $status
end
end
์ด์์ ์ด์ง๋ ์์ง๋ง ๋ด ์ ธ์ด ์ด์ ๋ด๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ ๋ ์์ฃผ ์ํํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
@SirCmpwn !!
๊ฐ ๋จ์ํ ๊ธฐ๋ฅ์ด๋ผ๋ ๊ฒ์ด ๋ถ๋ช
ํ์ง ์์ต๋๊น ? ์๋ฅผ ๋ค์ด bash๋ ๋ค์์ ์ง์ํฉ๋๋ค.
ls some_long_file.txt
!!:s/ls -l/cat/
์ด ์ฌ์ฉ ํด์ผ !! ์ง์ ์ฌ๋ถ "๋ฌผ๊ณ ๊ธฐ๋ ์์ํด์ผ ํ๋ค!!"๋ผ๊ณ ๋งํ๋ ์ ์ ๋ค ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ์ ๋ํด ๋ค๋ฅธ ์๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋น์ ์ ์ด๊ฒ์ ๋ํด ๊ฐํ๊ฒ ๋๋ผ๋ฏ๋ก ๋น์ (๋๋ ๋๊ตฌ๋ ์ง)์ด ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ ์์ฑํ๋๋ก ๊ถ์ฅํฉ๋๋ค !! ๋ฌผ๊ณ ๊ธฐ์์ ์๋ํฉ๋๋ค(๊ตฌํ์ด ์๋ ์๋ฏธ๋ก ). ์ ํํ ์ด๋ค ๊ตฌ๋ฌธ์ด ์ง์๋ฉ๋๊น? ์ด ํ์ฅ์ ๋ณ์ ๋๋ ํ๋ก์ธ์ค ํ์ฅ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ ํ์ ํ์ฅ๊ณผ ์ด๋ค ๊ด๋ จ์ด ์์ต๋๊น? ํ์ฅ๋ ๋ฌธ์์ด์์ ์ธ์ ๋ถํ ์ ์ด๋ป๊ฒ ๋ฐ์ํฉ๋๊น? ๊ทธ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด์ค์ผ์ดํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
์ด๊ฒ์ ์ง์ฌ ์ด๋ฆฐ ์์ฒญ์ ๋๋ค. ๊ธฐ๋ฅ์ ๋จ์ผ ์ฌ์ฉ ์ฌ๋ก๋ก ์ ์๋์ง ์์ต๋๋ค. ๋ ผ์ํ ๊ตฌ์ฒด์ ์ธ ์ ์์ด ํ์ํฉ๋๋ค.
"๋๋ ์ด ์ผ์ด์ค๊ฐ ์๋ํ๊ธฐ๋ฅผ ์ํ์ง๋ง ์ด๋ป๊ฒ ์๋ํ๋์ง ์๊ดํ์ง ์์ต๋๋ค."๋ผ๊ณ ๋งํ๋ค๋ฉด ๊ทธ๊ฒ์ ๊ด์ฐฎ๊ณ ์ ํจํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ๋ ๊ตฌํ๋๊ธฐ ์ ์ ์ธ๋ถ ์ฌํญ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
๋จ๊ธฐ์ ์ผ๋ก ํ๋์ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ์ ์ญ ๋ณ์นญ์ ๊ตฌํํ ๋ค์ !! ํ๋๋ก. ๋์์ docopt ์์ ์ ๋ณํฉํ๊ณ sudo์ ๋ํ ๊ธฐ๋ฅ ์๋ช ์ ์ ๊ณตํ ๋ค์ !! ์ ๊ท ๋ณ์นญ์ผ๋ก. ์๊ฐํ๋๋์ ๋ฐ๋ผ ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ ๋ฐฉํฅ์ด ๋ฌ๋ผ์ง๋๋ค!! ์ฌ๋ฐฉ์ผ๋ก ํ์ฅ๋๊ฑฐ๋ ๋ช ๋ น ์์น์์ ํ์ฅ๋์ด์ผ ํฉ๋๋ค.
@ridiculousfish '!!' ๊ธฐ๋ฅ ์์ฒญ์ ์๋นํ ์์ธํด์ผ ํฉ๋๋ค. ๋๋ ํญ์ ๋ค์๊ณผ ๊ฐ์ด ํ ๋ ๋น์ ์ด ์ค ํน์ ์๋ฅผ ์ฌ์ฉํ ์ ์ด ์์ต๋๋ค.
$ ls -l some_long_file.txt
$ ^ls-l^๊ณ ์์ด
๋ถ๋ช ํ ์ด๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ๋ณ๋์ ๊ธฐ๋ฅ ์์ฒญ์ด ๋ ๊ฒ์ธ๋ฐ, ์ต๊ทผ์์ผ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ ์คํธํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ์ฐ์ง ์์์ต๋๋ค.
"fish: ๋ช ๋ น ์ด๋ฆ์ ์์ํ ๋ ๋ฆฌ๋๋ ์ ์ด ๋ฐ์ํ์ต๋๋ค. Fish๋ ๋ช ๋ น ์ ์ ๋ฆฌ๋๋ ์ ์์ ์ ํ์ฉํ์ง ์์ต๋๋ค."
๋ช ๋ น์ด ์์น์ ์๋ '^'๋ ๊ธฐ์กด ๊ธฐ๋ฅ๊ณผ ์ถฉ๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋์ฒดํ์ผ๋ก ์ทจ๊ธํ๊ธฐ ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ณ๊ฐ์ ๋ฌธ์ ์ด๋ฉฐ '!!'์ ๋ํ ๋ช ํํ ์ ์๊ฐ ์์ด์ผํ๋ค๋ ๊ฒ์ด ์ณ๊ธฐ ๋๋ฌธ์ ์ธ๊ธํ๋ ๊ฒ์ ๋๋ค. (๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ญ์ฌ ๋์ฒด)๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ค์์ ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ์์ ๋๋ค.
$ !!
$ some command `!!`
$ !keyword
$ !123
@gillham์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ํ @nyarly ์๋ !!
๋ฐ !$
๋ํ ์๋ฆฌํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. https://github.com/fish-shell/fish-shell/wiki/Bash-Refugees
๋ ๋์ ์์ #5:
Fish๋ ์ญ์ฌ์ ๊ธฐ๋ฐ์ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ sudo๋ฅผ ์์ด๋ฒ๋ ธ๊ฑฐ๋ ์๋ํ์ง ์๋ ๋ช
๋ น์ผ๋ก ๊ธฐ๋ก์ ๋๋ฝํ ๊ฒฝ์ฐ ์ค์ ๋ก (์ฅ๊ธฐ์ ์ผ๋ก) ๊ธฐ๋ก์์ ์๋์ผ๋ก ์ง์ฐ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์, ์ ํฐ๋ฏธ๋์ธ exec bash๋ฅผ ์ด๊ณ ~/.config/fish/fish_history๋ฅผ ํธ์งํฉ๋๋ค. ๋ฌผ๊ณ ๊ธฐ๋ ๋ด๊ฐ ์ด๊ฒ์ ๊ฑด๋ ๋ฐ์์ ๋ ๋ช ๋ฒ์ด๊ณ ์๋ชป๋ ๋ช
๋ น์ผ๋ก ๋๋ฅผ ์ด๋์์ต๋๋ค.
@nyarly ์ mkdir โฆ; cd !$
์ต๊ด์ ๋ํด์๋ mkcd โฆ
.
function mkcd --description 'mkdir and cd'
mkdir $argv[1]
and cd $argv[1]
end
๊ธฐ๋ก์์ ์ง์ฐ๋ ๋ฐ bash ์์์๊ฐ ํ์ํ์ง ์์ต๋๋ค.
history --delete --prefix some_command
fish_config history
๋ ํฌ์ธํธ ์ค ํด๋ฆญ์ผ๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ https://github.com/fish-shell/fish-shell/wiki/Bash-Style-History-Substitution- (!!-and-!$)๋ฅผ ์ฌ์ฉํ์ฌ Fish ๋ด์์ ์์ฃผ ์ ๋ณต์ ํ ์ ์์ต๋๋ค. -- ์๋ง๋ ๋ฌธ์ ์ผ ๊ฒ์ ๋๋ค. ๋ซ์์ผ ํ๋?
:-1: :-1: ์์ ํ bash ํธํ ๋ชจ๋๊ฐ ๊ตฌํ๋์ง ์๋ ํ.
์ด๊ฒ์ ๋ฏธ๋๋ฌ์ด ๊ฒฝ์ฌ๋ฉด์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ๋ฌผ๊ณ ๊ธฐ์์ ๊ตฌํ๋๋ค๋ฉด ๋จ์ผ !s๋ ์ด๋ป๊ณ ksh ๊ธฐ๋ก ๊ธฐ๋ฅ์ ์ด๋ป์ต๋๊น? $()๋ ์ด๋ป์ต๋๊น? ๋ฌผ๊ณ ๊ธฐ๋ csh ์คํ์ผ์ ์์ ๋๋ค. ์ฌ๋๋ค์ด ์ ์ํ ์ ์๊ฑฐ๋ ์ ์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ zsh๊ฐ ์์ต๋๋ค...
๋ด๊ฐ ์ด๊ฒ์ ์ฐพ๋ ์ฌ๋๋ค์ ์ํ tl;dr๋ก์ ์ด ํ ๋ก ์์ ๋น๋ ๊ฒ์. (3๋ ์ด์)
๋๋ ํ์ ์ค ํ๋์ ๋๋ค. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ๋ฅผ ๋ฐ๋ผ์ง๋ง ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํฉ๋ฆฌ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ ์๋นํ ๋ ธ๋ ฅ ์์ด ์ฌ์ฉํ๋ ์ปดํจํฐ์ ์์ ๊ทธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๊ณ (๋ค๋ฅธ ์ปดํจํฐ์์ ๋ค๋ฅธ ๊ตฌ์ฑ ์ค์ ์ด ํ์ํจ) ! ! ๊ทธ๊ฒ์ด ๋๋ฅผ ์ํ ์๊ตฌ ์ฌํญ์ด๋ผ๋ฉด ์ถฉ๋ถํฉ๋๋ค. ๋ฐ๋ผ์ ์ธ์ ๊ฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถฉ์กฑํ ์ ์๊ธฐ๋ฅผ ํฌ๋งํ๋ฉด์ ์ด ํ ๋ก ์ ๋ฐ๋ฅผ ๊ฒ์ ๋๋ค.
@tetra-archos ์๋ฌด๋ ์์ง ๊ตฌ์ฒด์ ์ธ ์ ์์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ "๊ธฐ๋ฅ"์ด ๋ฌด์์ธ์ง ํ์คํ๊ฒ ํ์ ํ์ง ๋ชปํ๊ณ ์์ต๋๋ค. ๋น์ ์ ๋ถ๋ช ํ ์ด๊ฒ์ ๋ํด ๊ฐํ๊ฒ ๋๋ผ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ์ํฅ์ด ์๋ค๋ฉด ์ถ๋ฐ์ ์ผ๋ก ํ๋ํด์ผ ํ ํ๋์ ์ ์ํ๋ค๋ฉด ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ต์ํ ์ฌ์ฉํ๋ ํ์คํ ๋ฆฌ ๋์ฒด ์์์ ๋์ดํ๋ ๊ฒ์ด ์ ์ฉํ ๊ฒ์ ๋๋ค.
์ ์ฒด bash ํ์คํ ๋ฆฌ ๋์ฒด ๋์์ ๋งค์ฐ ๋ณต์กํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ๋ฏ๋ก "bash๊ฐ ํ๋ ์ผ์ ํ์ญ์์ค"๋ ์์ ๋จ๊ณ๊ฐ ์๋๋๋ค.
์์ง ๊ตฌ์ฒด์ ์ธ ์ ์์ ํ๋ ์ฌ๋์ด ์์ด์ '๊ธฐ๋ฅ'์ด ๋ฌด์์ธ์ง ์ ํํ ํ์ ํ์ง ๋ชปํ๊ณ ์์ต๋๋ค.
@tetra-archos: ์ด๊ฒ์ ์ ๋์ ์ผ๋ก ์ค์ํฉ๋๋ค. ์ง๊ธ๊น์ง๋ '์ฐ๋ฆฐ "!!"์ ์ํด!!'๊ฐ ๋๋ถ๋ถ์ด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ "!$"("๋ง์ง๋ง ๋ช ๋ น์ ๋ง์ง๋ง ์ธ์ ์ฝ์ "). ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด(๋๋ ๋์ฒดํ) ๊ตฌํ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌํด์ผ ํ ์ธ๋ถ ์ฌํญ์ด ๋ง์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด:
sudo !!
๋ฅผ ์
๋ ฅํ๊ณ Enter ํค๋ฅผ ๋๋ฅด๋ฉด ์ ์ฒด ํญ๋ชฉ์ด ์ฆ์ ์คํ๋จ) ๋๋ ๋ค์ ํ์ธํ ์ ์๋๋ก ๋จผ์ ์ฝ์
ํด๋ ๊ด์ฐฎ์ต๋๊น? "histverify" ์ต์
์ผ๋ก bash๋ฅผ ํ์๊ฒ ์ต๋๊น?๊ทผ์ก ๋ฉ๋ชจ๋ฆฌ์ธ ๊ฒฝ์ฐ fish_user_key_bindings์ ๋ค์์ ๋ฃ์ ์๋ ์์ต๋๋ค.
bind '!!' 'commandline -i "$history[1]"'
bind '!$' 'history-token-search-backward'
(์ด ๋ฌธ์ ๋ ๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ์์ ์ฌ์ฉํ์ง ์์์ผ ํ๋ ์ด์ ๋ ๋ ๋ฒ์งธ ๋ฌธ์๋ฅผ ํ์ธํ๊ธฐ ์ํด "!"๋ฅผ ์ ๋ ฅํ ํ ๋๊ธฐํ๋ค๋ ๊ฒ์ ๋๋ค.)
!!
๋ ๋์ ์ต๊ด์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
sudo !!
๋ช
๋ น์ ์์ด ์ค์ ๋ก ์คํํ ๋ด์ฉ์ ์๋ฌด์๊ฒ๋ ์๋ ค์ฃผ์ง ์์ต๋๋ค.
' a
nfang'์์ sudo
์ ํจ๊ป p
์ด์ ๋ช
๋ น์ ์คํํ๋ ค๋ฉด ๋ค์์ ์
๋ ฅํฉ๋๋ค.
^p ^a sudo
ํ์คํ ๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋์ ์ค ํธ์ง ๋ช ๋ น ^p ๋ฐ ^a๋ฅผ ์ฌ์ฉํ๋๋ก ์ฌ๋๋ค์๊ฒ ์๋ฆฌ๋ ๋ฉ์์ง๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
!!: command not found, try 'Ctrl-p Ctrl-a' to prefix the previous command with 'sudo' or any other prefix
๋๋ !!
์ซ์ด. ^p ^a
๋์ fish_vi_mode
๋ํ ๋ ์ฌ์ด ๋ฐฉ๋ฒ:
^v k I
๋น์ ์ด ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ ๋ฐฉ์์ด ๋ง์์ ๋ค์ง ์๋๋ค๊ณ ํด์ ๊ทธ๊ฒ์ด ๋ ์ ํจํ ๊ฒ์ ์๋๋๋ค.
2015๋
11์ 10์ผ ์ค์ 8์ 14๋ถ์ "Ivan Tham" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ซ์ด!! ๋. ^p ๋์ fish_vi_mode๋ฅผ ์ฌ์ฉํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ
^์:^vk ๋
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -155416048
.
๊ทธ ๋ฐ๋๋ ์ฌ์ค์ ๋๋ค.
์ด ๋ฌธ์ ์ ์์ชฝ ๋ชจ๋ ์ ๋นํ ํ์์ ์ฐ๋ ค๊ฐ ์์ต๋๋ค. ๋๋ ์ฃผ๋ ๋ฐฉํด๊ฐ ๋น ๋ฅด๊ณ ๋๋ฌ์ด ๋ฐฉ๋ฒ ๋์ _์ฌ๋ฐ๋ฅธ_ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋์ํ๋ฉฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐ๋ํ ๊ฒ์ด ์์ต๋๋ค.
๋ด (๊ทธ๋ฆฌ๊ณ ๋ถ๋ช
ํ ๋ค๋ฅธ ์ฌ๋๋ค์) ํ์์ ๋ง์ต๋๋ค.
2015๋
11์ 10์ผ ์คํ 12์ 19๋ถ์ "Eric Mrak" [email protected]์ด ์์ฑํ์ต๋๋ค.
๊ทธ ๋ฐ๋๋ ์ฌ์ค์ ๋๋ค.
์ด ๋ฌธ์ ์ ์์ชฝ ๋ชจ๋ ์ ๋นํ ํ์์ ์ฐ๋ ค๊ฐ ์์ต๋๋ค. ๋ด ์๊ฐ ์
์ฃผ๋ ๋ฐฉํด๋ ๋น ๋ฅด๊ณ ์ ํํ ๋ฐฉ๋ฒ ๋์ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ ๋๋ค.
๋๋ฌ์ด ๊ธธโ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -155494929
.
์ด๊ธฐ ํ ๋ก ์์ ์ธ๊ธํ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ณตํ๊ณ ์ฝ๊ฐ ํ์ฅํ๊ธฐ ์ํด: "!!"๋ณด๋ค ๋์๊ฒ ๋ ์ ๋ง๋ ํค ๋ฐ์ธ๋ฉ์ ์ฐพ์์ต๋๋ค.
์ผ๋ถ ํค์ ๋ฐ์ธ๋ฉํ ์ ์๋ ์ด ํจ์๋ฅผ ์์ฑํ์ต๋๋ค(์ ์๊ฒ๋ ^S, bind \cs 'prepend_command sudo'
). ๋ช
๋ น์ค์ ๋ด์ฉ์ด ์์ผ๋ฉด sudo๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ๋ด์ฉ์ด ์์ผ๋ฉด ๊ธฐ๋ก์ ๋ง์ง๋ง ํญ๋ชฉ ์์ sudo๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ sudo !!<Enter>
์ด์ ^S<Enter>
๋ฉ๋๋ค.
function prepend_command
set -l prepend $argv[1]
if test -z "$prepend"
echo "prepend_command needs one argument."
return 1
end
set -l cmd (commandline)
if test -z "$cmd"
commandline -r $history[1]
end
set -l old_cursor (commandline -C)
commandline -C 0
commandline -i "$prepend "
commandline -C (math $old_cursor + (echo $prepend | wc -c))
end
์ด๋ค ์ฌ๋๋ค์ ์ด์ ๊ฐ์ ๊ตฌ์ฑ์ ํ๊ธฐ์๋ ๋๋ฌด ๋ณต์กํ๋ค๊ณ ๋งํ์ต๋๋ค. ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ด ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ๋ฌผ๊ณ ๊ธฐ์ ํฌํจํ์ฌ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ต์ํ ํ ์ค์ง๋ฆฌ๊ฐ ๋๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๋ฌผ๋ก ์ด๊ฒ์ some_command --with-subshell-param (!!)
์ ๊ฐ์ ๋ค๋ฅธ ์๊ตฌ ์ฌํญ์๋ ์๋ตํ์ง ์์ต๋๋ค.
@Ahti ๊ทธ๊ฒ์ ์ค์ ๋ก ๋์
์, ์ง๊ธ๊น์ง๋ sudo !!
๋ฅ๊ฐํฉ๋๋ค. ๋ช
๋ น์ ์ค๊ฐ์ ์ํํ๊ณ sudo
์ฌ์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๋ ์ผ์ ์ ์๊ฒ ๋ง์ด ์ผ์ด๋ฉ๋๋ค. ^s
, ์ฆ์ sudo
์ ๋์ด!
๊ฐ์ธ์ ์ผ๋ก ์ ๋ sudo !!
์ด์ธ์ ๋ค๋ฅธ ์ปจํ
์คํธ์์ !!
๋ฅผ ์ฌ์ฉํ ์ ์ด ์์ผ๋ฏ๋ก ๊ท์ฐฎ๊ฒ ํ์ง ์์ต๋๋ค.
์ฐ์ฐํ๋ ๋๋ fish_vi_mode๋ฅผ ์๋ํ๊ณ ์ ๋ง ์ข์ํฉ๋๋ค. ๊ทธ๋ฌ๋ Vi ๋ชจ๋์์๋ ^s
๊ฐ ๋ ์ด์ ๋ฐ์ธ๋ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ์ ์?
config.fish์ ํค ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค. #2254๋ฅผ ์ฐพ์ ๋ค์ https://github.com/faho/fish-shell/commit/f7e8ad632a388d5f1c5eb4cfc33f3cdb1f7fd831 ์ ์ฐพ์ ๋ค์ http://stackoverflow.com/a/16675092_292408 ์ ์ฐพ์์ต๋๋ค. ์์ง ์กด์ฌํ์ง ์๋ ๊ธฐ๋ฅ.
๊ทธ๊ฒ์ ํจ๊ณผ๊ฐ ์์๊ณ ์ด์ Vi ๋ช
๋ น ๋ชจ๋์ ์์ ๋ [N]
์ ๋์ฌ๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค.
ํธ์ถ๊ธฐ์์ ํ์ฌ ํ์ดํ๋ผ์ธ์ ์คํํ๊ธฐ ์ํ Alt-P๊ฐ ์ด๋ฏธ ์์ต๋๋ค. Alt-S๋ ์ถ๊ฐํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
@Ahti 's๋ ๋ชจ๋๊ฐ ์ฐพ๊ณ ์๋ ๊ฒ์ ๋ํ ๊ฝค ์ฐ์ํ ์๋ฃจ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์์ ํ์ฅ์ด๋ ์ด์ํ ๊ฒฝ์ฐ์ ๋ํด ๊ฑฑ์ ํ ํ์ ์์ด ํค๋ฐ์ธ๋๋ก ์ง์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ํ๋ ๋๋ก ์ฌ์ฉํ๊ฑฐ๋ ์ทจ์ํ ํ ์คํธ๋ฅผ ๋ฐฐ์นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@nyarly ์ ๋์ฒด์ @Ahti ์ ํค ๋ฐ์ธ๋ฉ ์๋ฃจ์
์ด ๋ชจ๋ ๋ง์์ ๋ญ๋๋ค .
๊ฐ์ธ์ ์ผ๋ก sudo !!
์ ์ปจํ
์คํธ์์๋ง !!
ํฉ๋๋ค.
์ด์ด! ์ด ์ค๋ ๋๋ ์ด์ ๊ฑฐ์ 4๋ ์ด ๋์์ต๋๋ค. ๋๋ ์ต๊ทผ์ วว.com๊ณผ วว.net(Github์์๋ ํ์ดํผ๋งํฌ๋ฅผ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ)์ ์ํ๋ ์ฌ๋์ด ์์ผ๋ฉด ๊ตฌ์ ํ์ต๋๋ค.
์ผ! ๋ฉ์ง๋ค! @geoff-codes ์ด๋ป๊ฒ ํ์ จ๋์?)
๊ทธ๋ค์ ์ต๊ทผ .com ๋ฐ .net "๊ตญ์ ํ" ๋๋ฉ์ธ ์ด๋ฆ์ ํ์ฉํ๊ธฐ ์์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์ฌ๋ก์๋ ์ด์ ๋ํ ์ง์์ด ์ฌ์ ํ ๋ฒ๊ทธ๊ฐ ๋ง์ต๋๋ค. ์๋ฅผ ๋ค์ด โตโต.com์ ๋ฑ๋กํ ์ ์์ง๋ง โตว.com์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
๋๋ ๋น์ ์ด !!.com์ ๋ฑ๋กํ ์ ์๋ค๋ ๊ฒ์ ๋ชฐ๋์ต๋๋ค, ๊ทธ๊ฒ์ ๋ฏธ์ณค์ต๋๋ค.
์ด ๋ฌธ์ ์์ ๋ฐฐ์ด ๊ตํ: Unix ์ ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ ๊ตฌํํด์ผ ํ๋ ์ ์ผํ ๊ธฐ๋ฅ์ sudo !!์ ๋๋ค. ์๋ํ๋ฉด ์ฌ๋๋ค์ ๊ทธ๊ฒ ์์ด๋ ์ด ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ง์งํ๊ฒ, ๋๋ ์ด๊ฒ์ด ํ๋ฅญํ๊ฒ ์๋ํ๊ณ ์๋ค๋ ์ฌ๋๋ค์ ๋ง์ ๋ค์์ต๋๋ค.
@bucaran ๋ค, ๊ทธ๋ฐ ๊ฒ ๊ฐ์์ ๐.
๊ตญ์ ํ๋ ๋๋ฉ์ธ ์ด๋ฆ - IDN:
https://en.wikipedia.org/wiki/Internationalized_domain_name
ํธ์ง: ์ด ๊ฒ์๋ฌผ์ ๋๋ฌด ๋๋ฆฌ๊ณ @geoff-codes์ ๊ฐ์ ๋ฑ๋ก๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค! ํ๋ช ํ ํฌ์์ผ ๊ฒ์ ๋๋ค. ๋ ๊ธ์(์ผ์ข ์) .com!
#!.com
๋ ์ผ์ดํฌ๋ฅผ ๊ฐ์ ธ๊ฐ์ ๊ฒ์
๋๋ค. com TLD ๋๋ ํด๊ฒฐํด์ผ ํ ์ฌํญ์ ๊ธ์งํ๋ ๊ท์น์ด ์์ต๋๊น?
Windows์ฉ bash ํ๋ ์ ํ
์ด์
์์ ํ๋ ์ ํ
์ด์
์ ํ๋ ์ฌ๋์ด ๋ฌด์ธ๊ฐ๋ฅผ ์
๋ ฅํ์ต๋๋ค.
์ด์ ๊ฐ์ด:
$> echo Hello Windows!!
๊ทธ๋ฆฌ๊ณ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ๋ชจ๋ ์ง์ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
2016๋
5์ 11์ผ ์คํ 1์ 57๋ถ์ "Aaron Gyes" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ตญ์ ๋๋ฉ์ธ ์ด๋ฆ - IDN
2016๋ 5์ 11์ผ ์ค์ 4์ 44๋ถ 58์ด์ Timophey([email protected])๋ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ผ! ๋ฉ์ง๋ค! @geoff-codes https://github.com/geoff-codes
๋
๊ทธ๋ ๊ฒ?)โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
<
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -218435761โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -218438118
๊ทธ๋ผ bash๋ก ๋ฐ๊ฟ์ผ ํ ๊น์?
@base698 - ํ์คํ ๋ฆฌ ๋์ฒด์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ง์ํ๊ธฐ ์ํด Fisherman ํ๋ฌ๊ทธ์ธ์
> which tool
> cat (!!)
์๋ฅผ ๋ค์ด ์คํฌ๋ฆฝํธ๋ฅผ ๊ฒ์ฌํ๊ธฐ ์ํด
Fisherman์ด ์ค์น๋๋ฉด fisher install nyarly/fish-bang-bang
ํ๋ฌ๊ทธ์ธ์ ์ค์นํ ์ ์์ต๋๋ค.
์์ ์ฑ์ ์ํด (๊ทธ๋ฆฌ๊ณ ์ฌ๋ฐ๋ฅธ ์๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด)
์ ๊ฐ ์ธ๊ธํ ์ ํ๋ธ ์์์ ์คํฌ๋ฆฐ์ท์
๋๋ค. '!!' ์ด์ Windows์์๋ ์ฌ์ฉํ ์ ์๋ ํจํด์
๋๋ค.
https://www.youtube.com/watch?v=2dB0igTfhfg&feature=youtu.be&t=760
๊ทธ๋ git commit -a -m "Rawr!!"
๋ฅผ ์คํํ๋ ค๊ณ ํฉ๋๋ค.
git commit -a -m "Rawrclear"
์์ ์ ์ข์ํ๋ ๋งํผ!! ๋๋ฌด ์ ์ฉํฉ๋๋ค. sudo !!
ํ์คํ์ง ์์ง๋ง ์ด์ ์ ๋ณด๋ฅผ ์ ๋ช
๋ น์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
find . -name something | grep "pattern"
๊ทธ๋ฌ๋ฉด ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ป์ ๋๊น์ง ํจํด์ ๊ฐ์ง๊ณ ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ๋ค์ (someCommand !!
)์ ๊ฐ์ด ์ ๋ฌํฉ๋๋ค. ํ์ฌ ๋ฌผ๊ณ ๊ธฐ์์๋ ๋๋ฌด ๋ง์ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์๊ฒ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
zsh ํ์ฅ!! ํธ์งํ ์ ์๋๋ก ํฉ๋๋ค. ๊ทธ๋์ zsh๋ก ๋์๊ฐ์ผ ํฉ๋๋ค.
fisherman์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด nyarly/fish-bang-bang
ํ๊ณ !!
๋ฐ !$
๋ช
๋ น ํ์ฅ์ ์ป์ ์ ์์ต๋๋ค.
@nyarly ์, ์๋ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ !
๋ฅผ ์
๋ ฅํ ์งํ์ ํ์ฅ๋๋ ๋ฐฉ์์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. ์ด์ํ๊ฒ ๋๊ปด์ก๋ค. zsh๋ ๊ณต๋ฐฑ์ ์
๋ ฅํ๊ฑฐ๋ Enter ํค๋ฅผ ๋๋ฅด๋ฉด ํ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋๋์ ์ค๋๋ค.
ํธ์ง: ์ ๊ฒฝ ์ฐ์ง ๋ง์ธ์, ๋๋ ๊ทธ๊ฒ์ ํ ์ ์์์ต๋๋ค. ZSH๋ฅผ ๋ด๊ฐ ์ํ๋ ๋๋ก ์ค์ ํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฑ๊ฐ์ ์ผ์ธ์ง ์์์ต๋๋ค. nyarly์ ํ๋ฌ๊ทธ์ธ์ด ์ํํด์ผ ํฉ๋๋ค.
[ํด๊ฒฐ] ์ฌ๊ธฐ:
https://blog.hospodarets.com/fish-shell-the-missing-config
์ด๊ฒ์ด ๊ตฌํ ๋์ง ์์ ๊ฒ์ด ๋๋ฌด ๊ธฐ์ฉ๋๋ค! ๋ฌผ๊ณ ๊ธฐ์ ์ง๊ต์ฑ์ ๋ฒ์น๊ณผ ์ฌ์ฉ์ ์ค์ฌ์ !!
๋ฐ !$
๋ฐ ์๋ง๋ s^
์ด์์ ์๊ฐ์ด ํ์ํฉ๋๋ค. ๊ทธ๋์ ์ฌ๋๋ค์ ๊ทธ๊ฒ๋ค๋ง ์ฌ์ฉํฉ๋๋ค. Fish์ ์๋ฃจ์
์ ๋ณด๋ค ์ํธ์์ฉ์ ์ด์ด์ ์ธ์๋ฅผ ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค. ์คํธ๋กํฌ ์ ๋ฉด์์ ์ถฉ๋ถํ ํจ์จ์ ์ด๊ณ !!
์ ๋์ผํ๊ฒ ํจ์จ์ ์
๋๋ค.
์ผ๋ถ ์ฌ์ฉ์๋ !!
๋ฐ !$
๋์น๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ณ ์ถ์ดํ์ง ์์ต๋๋ค. Fish๋ ์ด๋ฌํ ๊ธฐ๋ฅ๋ง ์ฃ์ง ์ผ์ด์ค๋ก ๊ตฌํํด์ผ ํฉ๋๊น(์ง๊ต์ฑ์ ๋ฒ์น ์ฐธ์กฐ)? ์๋๋ฉด ๋ชจ๋ Bash ๊ธฐ๋ก ๊ต์ฒด? ์๋๋ฉด ๋ค๋ฅธ ์์ ๋ชจ๋ ๊ธฐ๋ฅ? ์ฌ์ฉ์๊ฐ ์๊ฐํ ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์?
๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ์ํ๋ ์ฌ๋์ ์ํ ์์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ~/.config/fish/functions/fish_user_key_bindings.fish์ ๋ฃ์ผ์ญ์์ค.
function bind_bang
switch (commandline -t)
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function bind_dollar
switch (commandline -t)
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
function fish_user_key_bindings
bind ! bind_bang
bind '$' bind_dollar
end
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -7869918์ ๋งํฌ๋ @siteshwar URL์ด ๊นจ์ก์ต๋๋ค. ์์ง ๋ฏธํด๊ฒฐ ์ํ์ธ ์ด ๋ฌธ์ ๋ฅผ ์ฝ๋ ์ฌ๋๋ค์ ์ํด ๋๊ธ์ ์์ ํ์๊ฒ ์ต๋๊น?
๋๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ FAQ๋ฅผ ํธ์คํ ํ๋ ๊ณณ์ ๊ฐ๋ฆฌํค๋๋ก ๊ทธ์ ์ฝ๋ฉํธ๋ฅผ ํธ์งํ์ต๋๋ค.
์ด์ ๋ฌผ๊ณ ๊ธฐ๋ &&์ || (https://github.com/fish-shell/fish-shell/issues/4620) bash๋ฅผ ์์ ํ ๋์ฒดํ๋ ๊ฒ์ ๊ฐ๊น์ต๋๋ค!
์ ๋ง ํผ๋์ค๋ฌ์์-
๋ฐ๋ผ์ 1๋ฒ ์ค๊ณ ๋ชฉํ๋ฅผ ์ ์ธํ๋ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. Everything that can be done in other shell languages should be possible to do in fish
... ๋๋ฅผ ๋ค๋ฅธ ๋ชจ๋ ์์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์์ ์ค ํ๋๋ฅผ ์ํ ํ ์ ์์ต๋๋ค?
๋ฌผ๊ณ ๊ธฐ FAQ๋ ์ฌ์ฉ์๊ฐ ๋์
First press Up, then Home, then type "sudo ".
์ด๋ด, ๋ฌด์จ ์คํธ๋ ์นญ์ด์ผ. ์ด๋ค ์ด์ ๋ก๋ ์ง๋ 6๊ฐ์ ๋์ ์ผ๋ง๋ ๋ง์ ์ฌ์ฉ์๊ฐ 'ํ' ๋ฒํผ์ ๋๋ ์ต๋๊น? ์ฌ๋ ํ์ด์ง๊ฐ ๋ฐ๋ก ๋งํ ๋จ์ ํ์ผ์ ์ด๊ณ ์ค์ค๋ก๋ฅผ ์ฐพ๋์์ ์ง๊ต ์ ๋๊ฐ ์๋์์ ๊ทธ ๊ธธ์ด์, ๊ทธ ์๋์ผ๋ก ๋ถ์ ๋ช ๋ น์ ์ฃผ์ฅ ํ ์ ์์ต๋๋ค.
@andysalerno
์ํํ๋ ค๋ ์์
์ sudo๊ฐ ์ถ๊ฐ๋ ์ด์ ๋ช
๋ น์ ์คํํ๋ ๊ฒ์
๋๋ค.
๋ฌผ๊ณ ๊ธฐ๋ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค
๋ค์ด๊ฐ๋ ๋์
First type "sudo ", then press shift+1, then press shift+1
๊ทธ๋์
ctrl+p, ctrl+a, type "sudo "
์ด๊ฒ์ bash์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
์ด์ ๋น์ ์ด ์์ฃผ ๋ฌป๋ ์ง๋ฌธ์ ์ธ๊ธํ์ผ๋ฏ๋ก ๋ค์ ํ์ธํ๊ณ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฐ๋ก ๊ฐ๊ธฐ์ ๋ํ ๋ถ๋ถ์ ์ ๊ฑฐํ์ต๋๋ค. ์ด์ ๋๋ฝ๋์์ต๋๋ค. (์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด https://github.com/fish-shell/fish-shell/pull/3879๋ฅผ ๋ง๋ค์์ต๋๋ค.)
์ด ๋จ์ถํค๊ฐ ์๋ํ๋ ์ด์ ๋ ๋ผ์ธ ํธ์ง์ ์ํด ๋๋ฆฌ ๊ตฌํ๋๊ฑฐ๋ ๋ชจ๋ฐฉ๋๋ readline
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค.
์๊ฐ์ ์ฐพ์ผ๋ฉด ์ด๊ฒ์ faq์ ์ถ๊ฐํ๊ธฐ ์ํด pull ์์ฒญ์ ๋ง๋ค ๊ฒ์
๋๋ค.
Home
ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ต์
์ด ์๋๋๋ค. ๊ทธ ํค๊ฐ ๋ง์ ํค๋ณด๋(์: ์ 3๊ฐ์ ํค๋ณด๋ ๋ชจ๋)์์ ๋ค๋ฅธ ์์น์ ์๊ธฐ ๋๋ฌธ์ ๊ทํ์ ์ข์ ๊ฐ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ค์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ํ๋ ์ฝ๊ณ (์์ ์์ ๋ฌธ์ ํค๋ง, ํ ํค ์์, ํ์ดํ ํค ์์), ๋น ๋ฅด๊ณ (๋๋ฌด ๋ง์ ํค ์ ๋ ฅ์ด ์๋) _๋ฌธ์ํ๋_ ๋ฐฉ๋ฒ์ ๊ฐ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ต์ฅํฉ๋๋ค, ๋๋ ctrl+p์ ๋ํด ์ ํ ๋ชฐ๋์ต๋๋ค! ๋ ์ด๊ฑฐ๋ณด๋ค ๋ ์ข์!!.
ํธ์งํ๋ค:
๋ง์ง๋ง ์คํ ๋ช
๋ น์ ์ฌํ๊ฐํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๋๋ bash์์ ์ด์ ๊ฐ์ ์ผ์ ๋ง์ดํ๊ณ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
> man -w fish # prints location of man file for fish
/usr/share/fish/man/man1/fish.1
> less $(!!)
๊ฐ๊ฒฐํ์ง๋ ์์ง๋ง eval ๋ฐ history ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
> man -w fish
/usr/share/fish/man/man1/fish.1
> less (eval $history[1])
๊ทธ๋ฌ๋ ์ด๋ฅผ ์ํํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ alt-p๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ช ๋ น์ ์ ๋ ฅํ ํ Alt-p๋ฅผ ๋๋ฅด๋ฉด Fish๊ฐ ๋ช ๋ น ์ถ๋ ฅ์ less๋ก ํ์ดํํฉ๋๋ค.
> man fish
alt-p > man fish ^&1 |less;
๋๋ ๋ชจ๋ ์ํฐ ๋ฑ
์ฌ๋๋ค์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๋ฑ
๋ฌผ๊ฑด์ด ๋ค์๊ณผ ๊ฐ์ "ํด๊ฒฐ ๋ฐฉ๋ฒ"๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ ํธ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ๋๋ฌด ๋ง์ต๋๋ค.
First press Up, then Home, then type "sudo ".
Bang ๋ช ๋ น์ ์ต์ํด์ง๋ฉด ์ ๋ง ๋ง๋ฒ ๊ฐ์ ๊ฒ์ ๋๋ค. ๋ฌผ๊ณ ๊ธฐ ์น๊ตฌ๋ค์ด ๋ง์์ ๋ฐ๊พธ๊ณ ๋ค์ ์ถ๊ฐํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ต์ํ ๋ค์๊ณผ ๊ฐ์ ์ข์ ๋ช ๋ น ์ค ๋ช ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
!!
!WORD
!WORD:p
!:n
!$
!^
!n:n
!:gs/MISTAKE/FIX
!#
!#^
๋ฌผ๊ณ ๊ธฐ๋ ๊ฝค ๋ฉ์ง๋๋ค. ๊ณ์ํด์ ์ข์ ์ผ์ํ์ญ์์ค.
๊ธฐ๋ก์ ๋ง์ง๋ง ๋ช ๋ น์ ์คํํ๋ ์ง์๋๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๋ค๋ฅธ tmux ์ฐฝ์์ ๋ช ๋ น์ ํธ์ถํ๊ธฐ ์ํด ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ฅํด์ผ ํ๋ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ด ์ ์ค ์ผ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
$ echo "hi"
hi
$ x
hi
$ x
hi
eval $history[1]
์๋ํ์ง๋ง ๋ ๋ฒ์งธ ํธ์ถ์ด ํญ๋ฐํ์ต๋๋ค. !!
๋ช
๋ น์ ์ ์ฉํ ์ ์
๋๋ค. ์ค์ ๋ก ํ์ฉ๋์ง ์๋ ํ ๊ฐ์ง๋ ํ์ดํ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ง์ํ๋ ๋ช
๋ น์ด ๋ฌผ๊ณ ๊ธฐ์ ์์ต๋๊น?
๋ด๊ฐ ์ง๊ธ ์๊ฐํ ์์๋ ์ต์ ์ ๊ธฐ๋ก์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ ํ ๊ณต๋ฐฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
$ function x ; eval $history[1] ; end
$ echo "hi"
hi
$ x # note leading space
hi
$ x
hi
๋ด๊ฐ ์๋ ๊ฒ์ ํ์คํ ์ข์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ history-search-backward
๋ฐ์ธ๋ฉ์ผ๋ก ์ถฉ๋ถํ ๊ฒ ๊ฐ์ต๋๊น? ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ดํ ํค์ง๋ง ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ค! ์ข์ ์๊ฐ์ ๋๋ค. ์์ ๊ณต๋ฐฑ์ ์ฌ์ฉํ ์๊ฐ์ ํ์ง ์์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์๋ํด์ผํฉ๋๋ค.
์
๋ฐ์ดํธ :
๊ทธ๊ฒ์ ๋ด ์ ์ค ์ผ์ด์ค์ ์๋ฒฝํ๊ฒ ์๋ํ์ต๋๋ค. $ eval $history[1] #note extra leading space
์ด๊ฒ์ด ๋ด๊ฐ Fish์ ํจ๊ป ํ ์ ์๋ ์ด์ ์ผ ๊ฒ์ ๋๋ค. ์ฐ์ํ๊ณ ๋จ์ํ์ง๋ง ๋ง์ ๋ถ๋ถ์ ๋ํ ํ์ค ๋จ์ถํค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋น์์ฐ์ ์ ๋๋ค.
์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๋๋ค. sudo๋ก ์ด์ ๋ช ๋ น์ ๋ฐ๋ณตํ๊ณ ์ถ์ต๋๋ค.
sudo !!
1) ์๋ก ๋ฒํผ์ ๋๋ฅด์ญ์์ค
๋ฌธ์ , 5์ ํค๋ณด๋์ ์๋ก ๋ฒํผ์ ๋๋ฌ์ผ ํฉ๋๋ค. ์๊ฐ์ ์ฝ 1/4์ ๊ทธ๊ฒ์ ๋์น ๋ค์ ํค๋ณด๋๋ฅผ ๋ด๋ ค๋ค๋ณด๊ณ ์ ํํ ์ด๋์ ์๋์ง ํ์ธํ๊ณ ์๋ง๋ ๋์น ๋ถ๋ถ์ ์์ ํด์ผ ํฉ๋๋ค. ๊ทธ ๋ค์์...
2) ํ ๋๋ Ctrl-A๋ฅผ ๋๋ฅด์ญ์์ค.
ํ์ ๋ ๋ค๋ฅธ ํ์ฅ์ด๋ฉฐ ๋ค๋ฅธ ํค๋ณด๋์ ๋งค์ฐ ๋ค์ํ ์์น์ ์์ผ๋ฏ๋ก ์ฐพ์์ผ ํฉ๋๋ค. Ctrl-A๊ฐ ๋ ์์ฐ์ค๋ฝ๊ฒ ๋์ค๋ฏ๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
3) 'sudo'๋ฅผ ์
๋ ฅํ๊ณ ๋ฆฌํด์ ๋๋ฅด์ญ์์ค.
๋ค, 7๋ฒ์ ํค ์
๋ ฅ์ ๋ถ๊ณผํ์ง๋ง ๊ทธ ์ค ํ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋๋ถ๋ถ์ ์๊ฐ์ ๋ด ์์
ํ๋ฆ์ด ์ค๋จ๋๋ ์์ธ์ด ๋ฉ๋๋ค.
๋ค์ ํญ๋ชฉ, ๋๋ ์ด์ ๋ง์ง๋ง ์ธ์๋ฅผ ๊ณ ์์ด๋ก ์ง์ ํ๊ณ ์ถ์ต๋๋ค.
ls -l /etc/network/iptables
cat !$
๋๋ ๋ฌผ๊ณ ๊ธฐ์ ํจ๊ป:
1) '๊ณ ์์ด'๋ฅผ ์
๋ ฅํฉ๋๋ค.
2) Alt-Up
์ข์, ๋ค์ ์ด๊ฒ์ ๋งค์ฐ ์์ฐ์ค๋ฝ์ง ์๋ค. ๋๋ Alt ํค๋ฅผ ๊ฑฐ์ ๋๋ฅด์ง ์๊ณ ๊ทธ ์์ ์๋ Super(Cmd/Windows/๋ฌด์์ด๋ ) ํค๋ฅผ ์์ฃผ ์ณ์ ๋ด๊ฐ ์ํ ์ปจํ
์คํธ๋ฅผ ์์ ํ ๋ณ๊ฒฝํฉ๋๋ค.
๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ์ฃผ์ ๊ฒฝ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋์ ์ญ์ฌ ํ์ฅ์ด ํ์ํฉ๋๋ค. ๊ทธ ๋ถ์กฑ์ ๊ณ ๊ธ ์ฌ์ฉ์์ ์์ฐ์ฑ ๊ฐ์์ ๋๋ค.
@wrecklass ๋ด ์๊ฐ๋ฝ์์ sudo !!
์ป์ ์ ์์๊ธฐ ๋๋ฌธ์ https://github.com/nyarly/fish-bang-bang ์ ์ผ์ต๋๋ค. ์ด๋ฅผ ์ ์ํฉ๋๋ค.
๋ํ IIRC, ๋ฌผ๊ณ ๊ธฐ๋ Alt-P๊ฐ | less
์ถ๊ฐํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ช
๋ น์ด ํ์ฌ ๋น์ด ์๋ ๊ฒฝ์ฐ ๋ง์ง๋ง ๊ธฐ๋ก ํญ๋ชฉ์ ๋ํด ์๋ํ๋ "prepend sudo"์ ๋ํด Alt-S์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ๊ณ์ํด์ ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์("์ฆ, ์ !! ๋ฌผ๊ณ ๊ธฐ์์๋ bash๊ฐ ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ์ง ์์ต๋๋ค.") ์ ๋ ๊ด๋ จ์ํค๊ณ ์ถ์ต๋๋ค: !
๋ฌธ์์ ํน๋ณ ๋์ฐ๋ ๊ทธ ์ค ํ๋์์ต๋๋ค. bash์์ ๋๋ฅผ ๋ชฐ์ ๋์ต๋๋ค. ์ค๋ ๊ธฐ๊ฐ ๋ฌผ๊ณ ๊ธฐ ์ฌ์ฉ์๋ก์ ๊ทธ ํ๋์ด ์์์ ๋ณด์ปฌ์ ๋ฌ๋๊ธฐ ์ํด ๊ฐ์ ธ์จ ๊ฒ์ด๋ผ๋ฉด ๋งค์ฐ ์ค๋งํ ๊ฒ์
๋๋ค.
sudo !!
๋ ํ์ค์
๋๋ค. ๋๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ณ ๋ bash ๊ตฌ๋ฌธ์์ ๋ฒ์ด๋๊ธฐ ์ํด ๋งค์ฐ ์ด์ฌํ ๋
ธ๋ ฅํ๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ๊ฐ์ธ ์ฒ ํ์ ์ฐฌ์ฑํ์ฌ ํฉ๋ฒ์ ์ผ๋ก ์ ์ฉํ ๊ธฐ๋ฅ์ ๋ฐ์ด๋์ผ๋ก์จ ์งํ์ ์ค๋จํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@ClickSentinel์ด ๋งค์ฐ ์ด์ ๋ก ๋ด๊ฐ ์ฌ์ฉ ์ข
๋ฃ fish
์ ์คํฑ์ bash
. : ์ค๋ง์ผ :
ํ์ฌ ๊ณํ์ "!!"๋ ์ง์ํ ์ ์๋ ๊ธ๋ก๋ฒ ์ฝ์ด๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. et al. ์ด์ ๋ํด์๋ #5003์ ์ฐธ์กฐํ์ญ์์ค.
๋๋ ๊ทธ๊ฒ์ ๊ณผ์ ์ ์คํ์ผ๋ก ๊ทธ๊ฒ์ ์ฐฌ์ฑํ์ฌ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ต๋๋ค.
@tukusejssirs ๋ฐ @ClickSentinel , https://github.com/fish-shell/fish-shell/issues/288#issuecomment -306212011์ ์ฝ๋๋ฅผ ๊ตฌ์ฑ์ ์ถ๊ฐํด ๋ณด์ จ์ต๋๊น?
๋๋ ๋ช ๋
๋์ ๊ทธ ๋ณํ์ ๊ฐ์ง๊ณ ์์๊ณ (๋ด ๊ตฌ์ฑ์์ ๋ฌธ์ (์ด ๋ฌธ์ , ์๋ง๋?)์์ ์์ ๋จ) ๊ทธ๊ฒ์ ๋ด๊ฐ ๊ฐ์ฅ ์์กดํ๋ ์ ์ธ์ฒด ๊ณตํ์ ์ผ๋ถ ์ค ํ๋์
๋๋ค.(๋ํ, ํนํ ์ถ๊ฐ ์ผ์ด์ค์ ๊ฒฝ์ฐ) !$
์ด์ ์ ๋ฌธ์์ด์ ์ฌ์ฉํ์ฌ ์ํฅ ํ ํฐ ๊ฒ์์ ์ํํ๋ ๋ณํ์ด ์๋๋ฐ, bash์์ ์์
ํ ๋ ์ด๊ฒ์ด ์์ด์ ๊ฐ์ฅ ์ง์ฆ๋๋ ๊ฒ ์ค ํ๋์
๋๋ค.)
๋ด ๋ณํ(๋๋ ๋ด๊ฐ ๋ณํ์ ํ์ณค์ ์๋ ์์ต๋๋ค...๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค :man_shrugging: ):
function bind_bang
switch (commandline --current-token)[-1]
case "!"
# Without the `--`, the functionality can break when completing
# flags used in the history (since, in certain edge cases
# `commandline` will assume that *it* should try to interpret
# the flag)
commandline --current-token -- $history[1]
commandline --function repaint
case "*"
commandline --insert !
end
end
function bind_dollar
switch (commandline --current-token)[-1]
# This case lets us still type a literal `!$` if we need to (by
# typing `!\$`). Probably overkill.
case "*!\\"
# Without the `--`, the functionality can break when completing
# flags used in the history (since, in certain edge cases
# `commandline` will assume that *it* should try to interpret
# the flag)
commandline --current-token -- (echo -ns (commandline --current-token)[-1] | head -c '-1')
commandline --insert '$'
case "!"
commandline --current-token ""
commandline --function history-token-search-backward
# Main difference from referenced version is this `*!` case
# =========================================================
#
# If the `!$` is preceded by any text, search backward for tokens
# that contain that text as a substring. E.g., if we'd previously
# run
#
# git checkout -b a_feature_branch
# git checkout master
#
# then the `fea!$` in the following would be replaced with
# `a_feature_branch`
#
# git branch -d fea!$
#
# and our command line would look like
#
# git branch -d a_feature_branch
#
case "*!"
# Without the `--`, the functionality can break when completing
# flags used in the history (since, in certain edge cases
# `commandline` will assume that *it* should try to interpret
# the flag)
commandline --current-token -- (echo -ns (commandline --current-token)[-1] | head -c '-1')
commandline --function history-token-search-backward
case "*"
commandline --insert '$'
end
end
function fish_user_key_bindings
bind ! bind_bang
bind '$' bind_dollar
end
@scooter-dangle ๋๋ถ์ #228 ๋ณด๋ค ํจ์ฌ ์ ์๋ํฉ๋๋ค.
Fish๊ฐ ์ด๋ค ์์ ์ ์ํํ๋ ๋ณด๋ค ๊ด์ฉ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
LANG=C :
fish: Unsupported use of '='. To run ':' with a modified environment, please use 'env LANG=C :โฆ'
์๋ง๋ !!
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ด์ฉ์ ์ธ ๋์์ ์ ์ํ๋ ๋ฉ์์ง๋ฅผ ์์ฑํ ์๋ ์์ต๋๊น?
๊ทธ๋ฌ๋ ์ ์์ ํจ์จ์ ์ด์ด์ผ ํฉ๋๋ค. ๋น๊ตํ๋ค:
sudo !!<enter>
, ๋ชจ๋ ํค๋ณด๋์ ์์ ๊ธฐ๋ณธ ์์น์์<up><home>sudo <enter>
, Fish์ FAQ์์ ์ ์ํ ๊ฒ์ฒ๋ผ ์์น์ ๋ฐ๋ผ ์์ ์์ง์์ด ๋ค์ ํ์ํฉ๋๋ค.<C-p><Ca>sudo <enter>
, ์์ ์์ง์ด์ง ์๊ณ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ Bash, ZSH ๋ฑ์ ๊ธฐ๋ณธ๊ฐ์์๋ ์๋ํ๋ฏ๋ก ์ฌ์ฉ์๋ ๋ค๋ฅธ ์์ ์ฒ๋ฆฌํด์ผ ํ ๋ ์ด์ ๊ฐ๋ฅํ ์๋ก์ด ์ต๊ด์ ์ฑํํ ์ ์์ต๋๋ค.!$
๊ฒฝ์ฐ <alt-.>
์ ์์ด ๊ด์ฐฎ์ง ์๋์?
@psychoslave ๋ชจ๋ ์ค๋๋ ๋ฌธ์ , ํนํ ๋ซํ
์ด๊ฒ๋ ์ ๊ธ. ์ฝ 50ํ ์ด์ ๋ต๋ณ๋์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๋ค ์ด์ ๋ก
!!
๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํsudo !!
์ ๋๋ค.