bash의! $와 !!에 해당하는 것은 무엇입니까? 생선 껍질에?


30

나는 10 년 정도 bash를 사용해 왔으며 마지막 인수를 반복하기 위해! $를 입력하는 데 익숙해졌습니다.

$ mkdir foo
$ cd !$
cd foo

(이 마지막 줄은 명령에 의해 평가 된 것을 알려주기 위해 쉘에 의해 인쇄됩니다). 마찬가지로 다음과 같은 경우가 많습니다.

$ make_sandwich
-bash: make_sandwich: Permission denied
$ sudo !!
sudo make_sandwich

나는 정말로 생선 껍질을 좋아하지만 내 근육 기억력이 꽤 확립되었습니다. 물고기에 상응하는 것이 있습니까? 동일한 명령을 사용하도록 물고기를 구성 할 수 있습니까?

답변:


26

Alt- Up arrow이전 명령의 마지막 인수를 제공합니다. 후속 푸시는 이전 인수를 통해 순환합니다.

나는에 만족 상당을 발견하지 않은 !!것을 제외하고, Up다음 Ctrl-A


11

sudo !! (또는 sudo bang bang)은 가장 많이 사용되는 명령 중 하나입니다. 나는 여전히 괜찮은 평범한 오래된 배쉬를 사용하고 있습니다. 물고기가 올바르게 구현하지 않는다는 말을 듣게되어 죄송합니다. 약간의 인터넷 검색 결과 나는 이것을 발견했다.

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

스레드에서 더 많은 옵션이 있습니다 : https://github.com/fish-shell/fish-shell/issues/288


해당 코드를 어디에 입력해야합니까? 생선에 넣은 다음 "sudo !!" "source : 파일 '-'을 읽는 동안 오류가 발생했습니다."와 함께 일부 오류 줄을 반환
Benedikt S. Vogler

11

나는 물고기 사용자 메일 링리스트 에서이 완벽한 답을 찾았다 .

function bind_bang
    switch (commandline -t)[-1]
        case "!"
            commandline -t $history[1]; commandline -f repaint
        case "*"
            commandline -i !
    end
end

function bind_dollar
    switch (commandline -t)[-1]
        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

물고기의 깃 허브 위키에 대한 추가 토론


대단해! 이것을 포함하기 위해 최고의 답변을 편집하는 것을 고려해야합니다 ...
user1480704

2
나는 이것을 만들고 ~/.config/fish/config.fish붙여 넣었다. 물고기를 다시 시작한 후 훌륭하게 작동했습니다.
Katu

3

나는 당신과 같은 문제를 oh-my-fish 겪었고 https://github.com/oh-my-fish/oh-my-fish (fish 셸 의 플러그인 관리자)를 사용하여 수정했습니다 . 다음 명령으로 설치할 수 있습니다.

curl -L https://get.oh-my.fish | fish

그런 다음 bang-bang이 명령으로 플러그인 을 설치하십시오 .

omf install bang-bang 

1

!!의 컨텍스트에서만 사용하는 경우 명령에 sudo를 추가 sudo !!하는 ^s(CTRL + s)에 키 바인딩을 정의 할 수 있습니다 .

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

이를 통해 모든 명령을 입력하고 입력 할 때 등을 대신하여 sudo를 추가 할 수 있습니다 sudo !!

github 토론에 대한 Ahti의 의견을 참조하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.