Bash'i etkileşimli kabuğum olarak kullanıyorum ve her ikisinin de aynı adı paylaşması durumunda Bash'in bir kabuk yerleşik komutu yerine bir sistem komutu çalıştırmasını sağlamanın kolay bir yolu olup olmadığını merak ediyordum.
Örneğin, sinyal göndermek yerine adlandırılmış işlemlerin işlem kimliğini (pid) yazdırmak için sistemi kill
(from util-linux
) kullanın:
$ /bin/kill -p httpd
2617
...
Sistem komutunun tam yolunu belirtmeden, sistem komutu yerine Bash yerleşik kullanılır. kill
Builtin yok -p
komut başarısız böylece seçeneği:
$ kill -p httpd
bash: kill: p: invalid signal specification
Bash'i kabuk yerine yerleşik harici `time` komutunu kullan bölümünde listelenen cevapları denedim, ancak çoğu sadece time
bir kabuk anahtar kelimesi olduğu için çalışıyor - bir kabuk yerleşimi değil .
Bash yerleşkesini geçici olarak devre dışı bırakmak dışında enable -n kill
, şimdiye kadar gördüğüm en iyi çözüm kullanmaktır:
$(which kill) -p httpd
Kabuk yerleşik yerine harici komut yürütmenin daha kolay (daha az yazmayı içeren) yolları var mı?
Bu kill
sadece bir örnek olduğunu ve yerleşik ile önek ile harici bir komutla aynı ada sahip işlevleri çalışmasını engeller gibi genelleştirilmiş bir çözüm istiyorum unutmayın command
. Çoğu durumda, genellikle yerleşik sürümü kullanmayı tercih ederim, çünkü yeni bir işlem istemeyi kurtarır ve bazen yerleşik komutun harici komutun sahip olmadığı özelliklere sahiptir.
$(…)
- bakınız bu , bu ve bu .
which kill
içine almak (bunları yorumlara koyamazsınız) biraz daha kısadır.