Bash'ın karşılığı nedir! $ And !! balık kabuğunda mı?


30

On yıldan beri bash kullanıyorum ve son argümanı tekrarlamak için! $ Yazabilmek için alışmaya başladım, örneğin:

$ mkdir foo
$ cd !$
cd foo

(Bu son satır, komutunuzun neye göre değerlendirildiğini söylemek için kabuk tarafından basılmıştır). Aynı şekilde ben sık sık aşağıdakilere:

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

Gerçekten balık kabuğundan hoşlanıyorum, ama kas hafızam oldukça sağlam. Balıkta eşdeğeri var mı? Balıkları aynı komutları kullanacak şekilde yapılandırabilir miyim?

Yanıtlar:


26

Alt- Up arrowönceki komuttan son argümanı verir. Müteakip itmeler döngüsü önceki tartışmalara boğuldu.

Ben tatmin edici bir eşdeğer bulamadı !!hariç Upardından Ctrl-A


11

sudo !! (veya sudo bang bang) en çok kullanılan komutlarımdan biri. Hala sadece iyi eski bash kullanıyorum. Balığın doğru şekilde uygulamadığını duyduğuma üzüldüm. Biraz googling ve ben bunu buldum:

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

Burada iş parçacığı üzerinde çok daha fazla seçenek var: https://github.com/fish-shell/fish-shell/issues/288


bu kodu nereye girmeliyim? bu balığa girdikten sonra "sudo !!" "kaynak: '-' dosyasını okurken hata oluştu 'ile bazı hata satırlarını döndürür
Benedikt S. Vogler

11

Bu mükemmel cevabı balık kullanıcıları posta listesinde buldum :

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

Balıkların github wiki'si hakkında daha fazla tartışma


Bu harika! Bunu eklemek için en iyi cevabı düzenlemeyi düşünmelisiniz ...
user1480704 15

2
Bunu yarattım ~/.config/fish/config.fishve yapıştırdım. Balık yeniden başlattıktan sonra harika çalıştı.
Katu

3

Seninle aynı problemi yaşadım ve oh-my-fish (bu fishkabuk için bir eklenti yöneticisi ) kullanarak düzelttim https://github.com/oh-my-fish/oh-my-fish . Bu komutla yükleyebilirsiniz:

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

Ardından eklentiyi bang-bangbu komutla yükleyin :

omf install bang-bang 

1

Eğer kullanırsanız !!bağlamında sadece sudo !!, sen bir keybinding tanımlayabilirsiniz ^sprepends komutunuza sudo (CTRL + ler):

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

Bu, herhangi bir komutu yazmanıza ve durumunuza yazarken veya benzeri durumlarda sudo hazırlamasına izin verir. sudo !!

Ahti'nin github tartışması hakkındaki yorumuna bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.