2010-10-01 20 views
2

Sous Unix, j'ai un processus que je veux exécuter en utilisant nohup. Cependant, ce processus attendra à un moment où je dois entrer yes ou no pour que cela continue. Jusqu'à présent, sous Unix, je suis en train de faire ce qui suitPuis-je exécuter une commande multiligne dans les guillemets droits de Perl?

nohup myprocess <<EOF 
y 
EOF 

Je commence le processus « myprocess » en utilisant nohup et pipe dans un fichier avec « y » puis fermez le fichier. Les lignes ci-dessus sont effectivement trois commandes séparées - c'est-à-dire que j'appuie sur la première ligne dans UNIX, puis j'obtiens une invite où j'entre 'y' et puis j'appuie sur enter pour enfin taper 'EOF' et appuyer à nouveau sur return. Je veux savoir exécuter en Perl mais je ne suis pas sûr comment je peux exécuter cette commande comme il est sur trois lignes. Je ne sais pas si ce qui suit fonctionnera ....

my $startprocess = `nohup myprocess <<EOF & 
y 
EOF 
` 

S'il vous plaît aider - merci!

+0

Oui, cela fonctionnera. –

+0

Peut-être que le stackexchange Unix & Linux pourrait vous aider: http://unix.stackexchange.com/ – oadams

+1

Si vous ne savez pas si quelque chose va fonctionner, écrivez un petit programme de test et découvrez-le. :) –

Répondre

5

Je pense que votre proposition fonctionnera telle quelle. Sinon, essayez de remplacer la redirection avec un tuyau:

my $startprocess = `(echo "y" | nohup myprocess) &`; 

En outre, selon la raison pour laquelle vous faites une nohup, s'il vous plaît regarder à l'adresse suivante pure approche Perl daemonizing utilisant Proc::Daemon: How can I run a Perl script as a system daemon in linux?

+0

+1: même si je ne l'ai pas testé, cela semble raisonnable. – dawg

+0

Sur la plupart des Unixen/usr/bin/yes – user449592

2

Expect pour les programmes interactifs peut être utilisé aussi bien.