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

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

$ mkdir foo
$ cd !$
cd foo

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

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

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



답변

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

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


답변

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


답변

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

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

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


답변

나는 당신과 같은 문제를 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 

답변

!!의 컨텍스트에서만 사용하는 경우 명령에 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의 의견을 참조하십시오