Fish-shell: ์ง€์› ๊ธฐ๋ก ํ™•์žฅ(์˜ˆ: bash์˜ !!, bang bang ๋ฐ !$, bang Dollar, ํ† ํฐ)

์— ๋งŒ๋“  2012๋…„ 08์›” 20์ผ  ยท  98์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fish-shell/fish-shell

๋”๋ธ” ๋ฑ…์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ sudo๊ฐ€ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์–ด๋–ป๊ฒŒ๋“  ํ•ด์„๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผ๋œ fish-shell์ด โ€‹โ€‹์žˆ๋Š” Ubuntu 12.04 LTS์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„:

  1. ์•„๋ฌด ๋ช…๋ น์ด๋‚˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    $ ls

  2. ๋ฃจํŠธ๋กœ ์ด์ „ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    $ ์Šค๋„ !!
    sudo: !!: ๋ช…๋ น์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

    ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘:

sudo !! ๋ช…๋ น์€ ์ด์ „์— ์‹คํ–‰ํ•œ ๋ช…๋ น( ls )์„ ๋ฃจํŠธ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” bash์˜ ์žฌํ˜„ ๋‹จ๊ณ„์— ๋”ฐ๋ผ sudo ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Mac OS X 10.7์˜ ์ด์ „ ๋ฒ„์ „์˜ fish-shell์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๊ณ  sudo !! ๋Š” ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

duplicate

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

function sudo
    if test "$argv" = !!
        eval command sudo $history[1]
    else
        command sudo $argv
    end
end

์–ด๋–ค ์ด์œ ๋กœ !! ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ sudo !! ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  98 ๋Œ“๊ธ€

๋ฌธ์„œ 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๋…„ ์ด์ƒ)

  1. ํŒ€์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํŒ€์€ ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋ฅผ ๊บผ๋ คํ•˜์ง€๋งŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  4. ์‚ฌ๋žŒ๋“ค์€ ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ›์•„๋“ค์ด๊ฑฐ๋‚˜ ๋Œ€๋ถ€๋ถ„ ์ž‘๋™ํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—.

๋‚˜๋Š” ํ›„์ž ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ์ง€๋งŒ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜์— ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๊ณ (๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์„ค์ •์ด ํ•„์š”ํ•จ) ! ! ๊ทธ๊ฒƒ์ด ๋‚˜๋ฅผ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด๋ผ๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ธ์  ๊ฐ€ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•˜๋ฉด์„œ ์ด ํ† ๋ก ์„ ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@tetra-archos ์•„๋ฌด๋„ ์•„์ง ๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ์„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— "๊ธฐ๋Šฅ"์ด ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•ํ•˜๊ฒŒ ๋Š๋ผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด ์ถœ๋ฐœ์ ์œผ๋กœ ํ–‰๋™ํ•ด์•ผ ํ•  ํ–‰๋™์„ ์ œ์•ˆํ•œ๋‹ค๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ตœ์†Œํ•œ ์‚ฌ์šฉํ•˜๋Š” ํžˆ์Šคํ† ๋ฆฌ ๋Œ€์ฒด ์–‘์‹์„ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „์ฒด bash ํžˆ์Šคํ† ๋ฆฌ ๋Œ€์ฒด ๋™์ž‘์€ ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ "bash๊ฐ€ ํ•˜๋Š” ์ผ์„ ํ•˜์‹ญ์‹œ์˜ค"๋Š” ์‹œ์ž‘ ๋‹จ๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์•„์ง ๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ์„ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์—†์–ด์„œ '๊ธฐ๋Šฅ'์ด ๋ฌด์—‡์ธ์ง€ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@tetra-archos: ์ด๊ฒƒ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” '์šฐ๋ฆฐ "!!"์„ ์›ํ•ด!!'๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ "!$"("๋งˆ์ง€๋ง‰ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ˆ˜ ์‚ฝ์ž…"). ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด(๋˜๋Š” ๋Œ€์ฒดํ’ˆ) ๊ตฌํ˜„๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ๊ธฐ๋ก ๋Œ€์ฒด์˜ ์–ด๋Š ๋ถ€๋ถ„์„ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ - "์—ฌ๊ธฐ์— ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์‚ฝ์ž…ํ•˜์‹ญ์‹œ์˜ค"("!!") ๋ฐ "์—ฌ๊ธฐ์— ๋งˆ์ง€๋ง‰ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ์ธ์ˆ˜๋ฅผ ์‚ฝ์ž…ํ•˜์‹ญ์‹œ์˜ค"("!$") ๋˜๋Š” " !!:s/string1/string2" (์ €๋Š” emacs์˜ "query-replace" ๋˜๋Š” vim์˜ ":s/"์™€ ๊ฐ™์€ ์ผ๋ฐ˜ "๊ต์ฒด" ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž˜๋ชป๋œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ _์ „์—_ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค)? "๋‚ด ๊ธฐ๋ก์— ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ช…๋ น ์‚ฝ์ž…"("!5") - ๋‚˜๋Š” ๊ฒฐ์ฝ” ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค - ๋˜๋Š” "๋‹ค์„ฏ ๋ฒˆ์งธ ๋งˆ์ง€๋ง‰ ๋ช…๋ น ์‚ฝ์ž…"("!-5")์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? " ๋‹จ์–ด ์ง€์ •์ž "์™€ " ์ˆ˜์‹์–ด "๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
  • ๋ช…๋ น์„ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ(์˜ˆ: sudo !! ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  Enter ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ „์ฒด ํ•ญ๋ชฉ์ด ์ฆ‰์‹œ ์‹คํ–‰๋จ) ๋˜๋Š” ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋จผ์ € ์‚ฝ์ž…ํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ? "histverify" ์˜ต์…˜์œผ๋กœ bash๋ฅผ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  • "!!"ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๋ฐ "!$" ๋˜๋Š” ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ทผ์œก ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ? ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ฒฐ์ฝ” 100%๊ฐ€ ๋  ์ˆ˜ ์—†์œผ๋ฉฐ, ํžˆ์Šคํ† ๋ฆฌ ๋Œ€์ฒด๋Š” 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 "๊ตญ์ œํ™”" ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ํ—ˆ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
screen shot 2016-05-11 at 4 53 48 am

๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด์— ๋Œ€ํ•œ ์ง€์›์ด ์—ฌ์ „ํžˆ ๋ฒ„๊ทธ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด โตŒโต‘.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์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
bangpatternbash

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ํšŒ ์ด์ƒ ๋‹ต๋ณ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰