2016-04-14 16 views
2

Başhz çalıştıran bir işlem oluşturmak için Perl'i kullanmaya çalışıyorum ve bir dosya oluştur sample.txt, ancak bash komutundan sonra konsolda herhangi bir çıktı veya aynı dizin yapısında sample.txt dosyasını göremiyorum. Birisi aşağıdaki kodu düzeltmemde yardımcı olabilir mi?Perl betiğinde bash örneği oluşturabilir miyiz?

my $var = `bash -l`; 
system($var); 
print "Done!"; 

my $filename = 'sample.txt'; 
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; 
chmod(0777, "sample.txt"); 
print $fh "hello"; 
close $fh; 
print "Done 1!.."; 
+0

Şunu yazmak istediniz: 'my $ var = 'bash -l';' '' '' '' '' 'bash -l' yerine' bash -l' yerine yürütür? Bu haliyle, "bash -l" yi çıktıyı yakalayan Perl ile bir komut olarak çalıştırıyorsunuz (böylece ekranda hiç görmeyeceksiniz). –

+0

Hayır. Bu benim $ var = 'bash -l'mı yazmak istediğim şeydi, ama burada soru hiç bir çıktı göremiyorum ve ne görmek istersem? Herhangi bir öneri. – Yog

+1

Gerçekten demek istiyorsun '' $ var = 'bash -l';' '' '' '' '' '' '' '' '' '' komutunun komutları komutları yürütme komutunu çalıştırmaya çalışana kadar giriş kabuğundan çıktıyı göremeyeceğiniz anlamına gelir? Bence kafan karıştı. –

cevap

3

Bash'in -l argümanı interaktif kalmak için ikna edilir. Koşu: Kendi başına

perl -e 'print `bash -l`' 

etkileşimli stdin'i bağlı bash süreci vardır, ama altişlem çıkış perl'de tarafından yakalanır ve yazdırılır sonra ne zaman KontrolD bastığınızda yalnızca yapacak bash çıkışlar, sorun, exit veya logout vb.

Muhtemelen $var = 'bash -l'; ile başlamak istiyorsunuz. Başta interaktif olarak basta başlayacak, ve çıktığınızda, programın kalanını devam ettirecek. Benim için bunu yapmak alışılmadık bir durumdur ve muhtemelen -c argümanı ile normal olarak çıkışa bash için bir şeyler yazmanız gerektiğini umuyorum.

ile kod ilk iki satır değiştirilmesi:

system("bash", "-c", "echo Hello World!"); 

gerçekleştirir ve programın geri kalan kısmı normal olarak çalıştırılır. Ancak, senin için ne yapmanı istediğinden emin değilim. Bu örnek vakalar, yalnızca
system("echo", "Hello World!") veya print "Hello World!" ile daha iyi bir şekilde gerçekleştirilebilir.

+0

Ödevi "my $ var =" bash -l "olarak değiştirmek; (tek veya çift tırnaklar bu bağlamda aynı şekilde çalışır) doğru çalışalım. 'System' işlevi, işlemi standart giriş, çıkış, tümü Perl'in standart kanallarına bağlı hata ile çalıştırır ve kabuk interaktif bir kabuk olarak hassas bir şekilde çalışır. –

+0

@JonathanLeffler sağda; Cevabımda bunu güncelleyeceğim; Bu çıkışın görsel benzerliğiyle başa çıktım, ancak arka planda asılı kalan süreçleri terk ettim, bu durum böyle değil. – dlamblin

+0

Cevabınız için teşekkürler ... Bu şekilde yazabilir miyim sistem ("bash - l", "-c", "echo Hello World!"); – Yog

İlgili konular