Bir bash komut dosyası için fonksiyonu çengel sistemi bir tür oluşturmaya çalışıyorum. Ana bash komut zaten var ve nokta kullanıcıların bu üç yöntemden altında kendi eşyalarını içeren küçük bash komut dosyaları oluşturmak için izin için eklentileri sistemi bir tür oluşturmak mümkün olduğunu:
- Prehooking -> Kullanıcılar seçtikleri ana senaryonun işlevi önce idam edilecek bir işlev oluşturmak mümkün olacak
- Geçersiz kılma -> kullanıcıların özel içeriği ile yeniden yazmak için tamamen ana senaryonun bir işlevi geçersiz kılmak mümkün olacak
- Posthooking -> Kullanıcılar seçtikleri ana senaryonun bir fonksiyonu hemen sonra idam edilecek bir işlev oluşturmak mümkün olacak
Zaten prehooking ve işlevleri geçersiz kılınmasından eklentileri sistemini çalışma var. Ana komut eklentisi de çalıştığını yapılırsa (isimlendirme vb ...) küçük eklentileri komut dosyalarını ve bazı kural ve doğrulamaları aşağıdaki ayrıştırır.
Benim sorunum posthooking özelliğini oluşturmaya çalışıyor ve ben fikirler arıyorum. Prehooking için, Önce bir içeriğe yönelik sed yapıyor ve arama tüm işlevini yeniden nedenidir
{tarafından değiştirilmesi görünüm
{ call_to_prehookve bir cazibe gibi çalışır. Ama posthooking için aynı yapamaz. Ben son görünümünü yerini alamaz
}gibi bir şey ayarlamak için
call_to_posthook }fonksiyon dönüş varsa işe yaramaz çünkü. Yani posthook ulaşılabilir asla.
Şimdi böyle çağrı yığını falan bir işlev çağrısı enjekte mümkün olabilir, eğer ilgili mücadele ediyorum. bash aramaların ağaç bile ulaşmanın önce kontrol edilebilir emin değilim.
Daha iyi anlaşılması için biraz PoC:
#!/bin/bash #Main script function main() { magic_function one two } function one() { echo one } function two() { echo two } function magic_function() { echo this function parses plugins and execute needed stuff to modify functions echo I hope to find some way here to do possible the posthooking }
#!/bin/bash #Plugin done by somebody function posthook_one() { echo stuff to be executed after function one of the main script }
Size öyle fonksiyonun iki bir prehooking gerçekleştirerek yapılabilir fonksiyonun bir bir posthooking gerçekleştirmek için sanırım, ama bu benim için geçerli bir fikir değildir gerçek senaryonun karmaşıklığı nedeniyle ve tabii bu şekilde, son işlev yapamadı çünkü posthooked edilecek.
Herhangi bir fikir? Teşekkürler.