2010-02-12 4 views
0
#!/usr/bin/perl 
$sim = "multiq"; 
`make SCHED=$sim`; 
`script > scripter`; 
`echo hi`; 
print pack("c", 04); 
~ 

Ce script se bloque lorsque le script est appelé. Vous ne savez pas comment faire fonctionner le script Perl.Comment puis-je exécuter et terminer la commande script() linux de Perl?

+0

Que se passe si vous le port de ce code à un script shell? – mob

+0

'print pack (" c ", 04)'? Est-ce ainsi que vous essayez d'envoyer '^ D' au script? – mob

Répondre

5

Notez que les guillemets (‘‘) exécutent une commande et renvoient leur sortie. Si vous allez ignorer la sortie, utilisez system comme dans

system("make SCHED=$sim") == 0 or die "$0: make exited " . ($? >> 8) 

Si vous voulez tirer et oublier un programme (qui est, démarrer en arrière-plan sans se soucier quand il complète), vous pouvez utiliser

system("script >scripter &"); 
1

Vous devez exécuter ce processus en un seul enfant si vous voulez que tout le monde interagisse. Voir le perlipc pour diverses façons de gérer cela.

1

vous voudrez peut-être regarder Expect pour contrôler une session interactive

0

(« « contre-apostrophes) exécuter une commande et retourne son output.So vous pouvez stocker et manipuler davantage. Si vous voulez ignorer la sortie, utilisez system(). Aussi, si vous voulez exécuter un processus en arrière-plan, utilisez & dans le préfixe du processus. Par exemple, vous souhaitez commencer votre script en utilisant Gimp dire simplement

system("gimp &"); 
Questions connexes