Bash betiğinin içinde çalıştırıldığında “tarih” çalışmayı durdurur


9

Belirli bir dize bulmak için bash geçmişimi grep basit bir komut dosyası yazıyorum. Komut satırında, aşağıdakileri yapabilirim, ki bu iyi çalışıyor:

history | grep git

Ancak, yukarıdakiyle aynı komutla bir bash betiği oluşturduğumda, aniden historyhiçbir şey döndürmez:

#!/bin/bash
history | grep git

İlk satırı kaldırdığımda, #!/bin/bashkomut dosyam tekrar çalışıyor. Burada ne oluyor? historyBir bash betiğinin içinde nasıl kullanabilirim ?

Yanıtlar:


8

Aşağıdaki içindir bash 4.0 or higher only, ancak hile yapar. :)

#!/bin/bash -i
history | grep sometext

İşler! Denemek. ( -i= İ nteractive, bir bayrak değil bash 3.x için kullanılabilir ve öncesi)


Son zamanlarda beni sadece yapabildiği için reddeden ahbana da teşekkürler. (Muhtemelen bir bashv3 kullanıcısı, sadece hayal kırıklığı yüzünden, haha). En azından Martin için çözümüm çok yardımcı oldu, bu en azından bir rahatlıktı.
syntaxerror

7/24 destek mühendisleri için mesai sonrası çalışma saatlerini kaydeden bir araç yazarken de aynı soruyu sordum .. teşekkürler!
Henry van Megen

14

Bir bash shell betiği çalıştırdığınızda, örneğin shebang satırı olan yürütülebilir bir dosyayı çalıştırarak #!/bin/bash, betik etkileşimli olmayan bir kabukta çalıştırılır. Etkileşimli olmayan bir kabuğun özelliklerinden biri, geçmişin devre dışı bırakılmış olmasıdır. Dolayısıyla, komut dosyanızın geçmişi kullanabilmesini istiyorsanız, bunun gibi bir şey yapmanız gerekir:

#!/bin/bash
HISTFILE=~/.bash_history   # Or wherever you bash history file lives
set -o history             # enable history
history | grep git

Tabii ki, bu durumda az önce yapmış olabilirsiniz:

grep git ~/.bash_history

Yukarıdakilerin her ikisi de geçmiş dosyasının ( ~/.bash_history) güncel olmasını gerektirdiğinden, neredeyse kesinlikle olmayacaktır.

Mesele satırı kaldırıldıktan sonra komut dosyanızı nasıl çalıştıracağınızdan emin değilim. Komutlar, geçmiş etkinleştirilmiş olan geçerli kabukta çalıştığından , dosyayı kaynaklamak (ör., İle .) komut dosyasını çalıştırmakla aynı şey değildir .


history -aDosyaya ilk olarak son komutların eklendiğinden emin olmak için set komutundan hemen sonra yapmaya ne dersiniz ?

4
@ illuminÉ: yardım etmeyecek. Komut dosyasını çalıştırmaya başlayan kabuk tamamen farklı bir işlemdir; boş bir tarihle başlar.
rici
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.