“Apt-get install !!” ne yapar ve nasıl çalışmasını sağlar?


54

Yazarken birini gördüm

apt-get install !!

Bunu birkaç kez yaptı ve her seferinde farklı bir program kuruldu. Daha sonra neyin gerekli olduğunu otomatik olarak anladı gibi görünüyor.

Ancak, Ubuntu 14.04.1 LTS sanal makinemde denediğimde, sadece bazı kullanım talimatlarını gösterdi. Google'a apt-get install !!gitmek, pek iyi çalışmıyor gibi görünüyor. Birçok arama sonucu, çift ünlem işareti içermez.

Ne apt-get install !!işe yarıyor ve makinemde çalışmadığı için eksik olan ne olabilir?


Yanıtlar:


74

!! bash içindeki en son çalıştırılan komut anlamına gelen kısayoldur.

Bunu dene:

 echo hello
 !!

Bu bağlamda, !!diğerine genişletilecektir echo hello.

Olanları bir komut çalıştırmaya çalıştıklarını ve başarısız olduklarını ve yüklenmediğinden şikayet ettiklerini hayal ediyorum. Böylece yazdılar sudo apt-get install !!çünkü paket adı tesadüfen çalıştırmaya çalıştıkları komutun adıyla aynıydı. Sonuçta ortaya çıkan komut, bir paketi henüz yürütmeyi denedikleri komutla aynı isimde kurmaya çalışır.


10
Evet, muhtemelen budur. Çalıştırırsam lynx, yüklü olmadığını görün ve çalıştırdıktan sonra apt-get install !!lynx'i yükler. İşe yaramadı, çünkü apt-get install !!tek emir olarak denedim .
Thomas Weller

4
Bir şey olarak çalıştırmak gerekirken Başka bir ortak kullanımı sudogibi apt-get installbir şey ing.
MBraedley

6
@ AL: ilk önce siz yazıyorsunuz apt-get install some-programve ayrıcalıklarınızın olmadığını fark ettiğinizde, sadece sudo !!genişliyorsunuz sudo apt-get install some-program.
mgarciaisaia

3
!!!-1bash tarihindeki son öğeyi ifade eden bir takma addır. !-2sonda ve benzeri.
Tim

41

!!ile ilgisi yok apt-get. Bir önceki komuta genişletilecek bir kabuk anahtar kelimedir. Bu genişleme, geçerli komut yorumlanmadan önce kabuk tarafından yapılır.

Kimden man bash:

!! Önceki komuta bakın. Bu `! -1 'ile eşanlamlıdır.

Örneğin, bir komut çalıştırırsanız:

echo "foo"

O zaman kaçarsan:

sudo apt-get install !!

genişletilecek:

sudo apt-get install echo foo

Gördüğünüz gibi iki ayrı pakette genişletilmiş echove diğer foo. fooVe adında bağımsız bir paket yok echo. Yanı sıra kabuktan Buıltın echovardır /bin/echoGNU'ya coreutils paketinin bir parçası olan yürütülebilir. Böylece, bu tür paketlerin mevcut olmadığını söyleyen hatalar alırsınız.

Öte yandan, diğer kişi böyle bir şey yapıyor olabilir:

$ cowsay
The program 'cowsay' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
sudo apt-get install cowsay
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  filters
The following NEW packages will be installed:
  cowsay
0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded.
Need to get 18.5 kB of archives.

Gördüğünüz gibi cowsaykuruluyor.

Bunu yapmamanı tavsiye ederim (emin değilseniz), açık olmak zarar vermez.


2
İçin büyük bir açıklama !!. Ne anlama geldiğini biliyordum, ama tarif etme şeklini seviyorum.
Terrance

1
Uyarının evde denememesi için +1.
Shadur

16

!!: Önceki komuta bakın. Bu, !-1( Kaynak ) ile eşanlamlıdır .

Örneğin, eğer yürütürsem:

./test

Sonra Root olmam gerektiğini hatırlayın, sonra şunu yazabilirim:

sudo !!

yazmakla aynı:

sudo ./test

Son komutunuz çok fazla karakter içerdiğinde yararlıdır.


1
Parlak! Ben sudo !!emir hakkında hiç düşünmedim ; Yıllardır yaptığım şey yukarı tuşuna bir kez basmak, sonra imleci sola doğru kaydırıp eklemek sudo.
IQAndreas

1
@IQAndreas Yolunuz, çalıştırırken kötü bir şey olmayan komutu iki kez kontrol etme fırsatı sunar sudo.
Matt Nordhoff

1
Her zaman "sudo !!" okudum. "f *** aşkına sudo demek
istedim

1
@Vixen: Bu durumda, sikik senin için de bir şey olabilir
Thomas Weller

@IQAndreas imleci sola doğru hareket ettirmek çok sıkıcı görünüyor. Neden sadece Ctrl+Aya da en azından değil Home?
Ruslan

2

Soru çoktan cevaplandı, bu yüzden tekrarlı olmayacağım. Ancak, çeşitli kabuklarda komutları tekrarla / bul / düzenle yardımcı olan çok sayıda kısayol bulunduğunu belirtmek isterim. Kullandıklarımdan bazıları:

  1. !$ardından ENTERen son komutun son kelimesini yazacaktır. Örneğin,

    ls -l /let/me/in
    cd !$

Bu içine inecek /let/me/in

  1. Ctrl- Rve önceki komuttan bir kaç kelime yazın. Örneğin, eğer yazdığınız vi /home/mycoolproject.shgibi bazı rastgele komutlar ile takip ls, cd, pwdvb sonra sadece yazarak Ctrl- Rtakiben coolbu kadar çeker vikomutu.

Sadece bash (veya csh veya her neyse) klavye kısayollarını arayın ve bugün yaptığınız en iyi şey olacak!

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.