Perl betiğimi hangi betik, program veya kabuktan çalıştırdığımı nasıl belirlerim?Perl betiğimde hangi komut dosyasının, programın veya kabuğun çalıştırıldığını nasıl öğrenebilirim?
Örnek: Kabuktan (her kabuk türü için özelleştirilmiş), başka bir perl komut dosyasından komut dosyası olarak çağrılırsa farklı bir çıktı türü ve çalıştırılırsa makine tarafından okunabilir bir biçim varsa, insan tarafından okunabilir çıktısına sahip olmak isteyebilirim Sürekli bütünleştirme sunucusu gibi bir program.
Motivasyon: Çıktısını hangi kabuğun üzerine uygulayarak değiştiren bir aracım var. Normalde bu davranışı senaryo için bir seçenek olarak uyguluyorum, ancak bu aracın tasarımı seçeneklere izin vermiyor. Diğer kabuklar, hangi kabuğun çalıştığını gösteren ortam değişkenlerine sahiptir. Böyle bir özel değişkeni olmayan Powershell'i desteklemek için bir yama üzerinde çalışıyorum. Düzenleme: Bu yanıtların birçoğu Linux'a özeldir. Maalesef, Powershell Windows içindir. getppid
, $ENV{SHELL}
değişkeni ve ps
'a bildirme bu durumda yardımcı olmaz. Bu betiğin çapraz platform çalıştırması gerekiyor.
Anladığımdan emin değilim - bu durumda ebeveyn işlemine bakmamalısınız? – x0n
STDOUT'un bir terminal ('-t') olup olmadığını ve eğer öyleyse, sürekli bir entegrasyon daemonundan ziyade etkileşimli bir kabuktan çağrıldığınızı varsayarak test edebilirsiniz. Bununla birlikte, bu ortak teknik, ayrı-olası-ebeveyn-başına çıktıyı özelleştirmek için konuşmaz (ama bence bu yanlış bir arzu, her neyse). – pilcrow
Unutmayın, normalde kabuk veya kullanıcının hangi kabuğun çalıştığını belirtmesi için ayarladığı bir ortam değişkenini arar; Powershell ile böyle bir ortam değişkeni yoktur. –