Tarihin argümanlarını kullanarak bir komutu çalıştırmak için bash geçmişini nasıl kullanabilirim?


3

Bash tarihçesini bir komuttan geçmişindeki bir argümanla bağımsız değişkenlerle çalıştırmak için nasıl kullanabilirim?

!!Son komutu tekrar çalıştırmak için kullanabileceğimi biliyorum , ancak bu argümanlarla nasıl yeni bir komut çalıştırabilirim?

örneğin, önce ben koşarım:

~/somefolder/script.sh somefile

Hızlı koşmak istiyorum

~/somefolder/script.sh anotherfile

Denedim !! anotherfileama işe yaramadı.

Daha da iyisi, !-2 newargumentsikinci son tarih komutunu yeni argümanlarla çalıştırmak için nasıl koşabilirim ?

Geçmişi kaydırmak için okları kullanmak istemiyorum, sonra argümanların üzerine geri aldım.

Yanıtlar:


5

Komut adını seçmek için: 0 değiştiricisini kullanın:

$ man bash
$ !!:0 csh
man csh

Tüm argümanları en son komutla seç!

$ man sed awk perl
$ which !*
which sed awk perl
/usr/bin/sed
/usr/bin/awk
/usr/bin/perl

Geçerli komuta göre daha önce yürütülen 2. komutu seçin ve tüm argümanlarını şununla seçin:

$ echo !-2:*
echo sed awk perl
sed awk perl

Geçerli komuta göre daha önce yürütülen 3. komutu seçin ve 2. bağımsız değişkenini seçin:

$ echo !-3:2
echo awk
awk

"Hangi" ile başlayan son komutu seçin ve 3. argümanına ekleyin:

$ echo !which:3
echo perl
perl

Bütün bunlar, iki özel sorunuzun cevaplarını söyledi:

  1. Yukarıdaki ilk örneğe bakın.
  2. ! -2: 0 "yeni argümanlar listesi"

BASh kılavuzunu okuyun . ;-) Sadece ilk önce bir çizgi seçtiğini, yerine koymalarını yaptığını ve sonra bunu değiştiricileri kullanarak daralttığını bil, sonra belki sonucu yazdırabilirsin :p. Eşleşen çizgileri !?text?araştırın veya bir tarih komutunun satırındaki herhangi bir yerdeki metnin bir satırını eşleştirmek için eşleştirin. Diğer varyantlar sonra sadece çizgi parçalarını kapmak, ancak komut ie çalıştırmadan önce normal ifade değiştirme yapmazlar, bir çizgi maç !wh:gs/sed/tr/, whichsed, tr için komut subs.
Billy McCloskey,

-1

Terminalde Ctrl-R klavye kısayoluna basarsanız ve komutun herhangi bir benzersiz bölümünü yazarsanız, geriye doğru arama yapar ve sizin için bulur. Tamamen kaydırmaya gerek yok.


Evet, Ctrl-R'yi biliyordum ama hala yapmak istemediğim soruda belirttiğim argümanları kaldırmak için geri dönmeniz gerekiyor. Yine de cevap için teşekkürler. Btw senden hoşlanmayan ben değildim.
localhost,

@localhost Bir cevap sorunuz için yararlı değilse, aşağı oy vermelisiniz. Sistem böyle işler; Bunun için kendinize izin vermek zorunda kalmazsınız.
slhck

@slhck Yasanın mektubuna göre muhtemelen doğrudur, ancak dürüst bir çaba gösterdiği için birisini küçümsemek biraz kaba görünüyor. Ctrl-R'yi bilmeseydim, o zaman jadelord'un cevabı bana biraz yardımcı olurdu. Ama senin fikrin iyi ele alındı.
localhost,

Başlatılmamış olanlar için bir alternatif. Bu kadar. Tamam @localhost ve teşekkürler.
jadelord
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.