Komut satırları her yürütüldüğünde bash komut dosyasını çalıştırın


9

Yeni bir Ubuntu / Linux kullanıcısıyım, yukarıdaki başlığım olarak bir soru sormak istiyorum.

Örneğin, bir bash dosyam var ./script, herhangi bir komut satırı yazdığımda otomatik olarak çalışmasını istiyorum. Ben komut satırını çalıştırmak sonra pwdsonra ./scriptçalıştırılacaktır. Önümüzdeki komut satırı yazın kez ls -ladaha sonra ./scripttekrar çalıştırılacaktır.


4
sorabiliriz: yazılan her komut üzerinde ne tür bir eylemde bulunmak istiyorsunuz ? ve sadece etkileşimli yazılanlar için mi olmalı? veya bir komut dosyasındaki herhangi bir komut için mi? ve ssh üzerine yazılan komutlar ne olacak? vs. Bu bir XYProblem
Olivier Dulac

Yanıtlar:


13

PROMPT_COMMANDDeğişken ayarlamanız gerekir . Gönderen man bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

Örneğin, /tmp/PCher komut yürütüldüğünde geçerli tarih yazılır :

 $ PROMPT_COMMAND="date > /tmp/PC"

1
Evet, anladım .. oldukça güzel bir çözüm. (Upvoted)
Ender Phan

1
Bu yanlış. Komut echo $(date)bildirim zamanında çalıştırılacaktır, bu nedenle her zaman aynı zamanı gösterecektir (kaydedecektir).
heemayl

@heemayl: tabii ki haklısın, düzelttim
Arkadiusz Drabczyk

@ lộcphan Bu yanıtlardan biri sorununuzu çözdüyse, lütfen bir dakikanızı ayırın ve soldaki onay işaretini tıklayarak kabul edin. Bu, soruyu yanıtlandığı gibi işaretler ve Stack Exchange sitelerinde teşekkürlerin ifade edilme şeklidir.
terdon

@heemayl: Neden? ...
Arkadiusz Drabczyk

11

PROMPT_COMMANDOrtam değişkenini arıyorsunuz , terminalde verilen her komut yürütüldükten sonra, bir sonraki istemi göstermeden önce, bu değişkenin değeri komut olarak yürütülür.

Örneğin, şu şekilde ayarlayın:

export PROMPT_COMMAND='/path/to/script'

/path/to/scriptÖnce komut dosyasını çalıştırılabilir yapın.

Şimdi komut dosyası her komuttan sonra çalıştırılacaktır.

Sadece, değişkenin dışa aktarılmasını istemiyorsanız, yani bunu ortam yerine bir kabuk değişkeni yapmak istiyorsanız, bırakın export:

PROMPT_COMMAND='/path/to/script'

Gönderen man bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

Anladım, yardımın için çok teşekkür ederim :) (btw'ye yükseltildi)
Ender Phan

Neden kullanıyorsun export?
Arkadiusz Drabczyk

@ArkadiuszDrabczyk export, değişkeni PROMPT_COMMANDbir ortam değişkeni haline getirecektir, yani değişken, geçerli kabuğun tüm alt süreçleri (örneğin, alt kabuklar) tarafından kullanılabilecektir. Yalnızca geçerli kabuk oturumu içinde sınırlamak istiyorsanız (kabuk değişkeni), kaldırın export.
heemayl

5
@heemayl: IMO exportburada iyi bir uygulama değil - PROMPT_COMMANDyalnızca etkileşimli bir kabuk başlangıç ​​dosyasında ayarlanmalı ve ortamda
görünmemelidir
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.