При выполнении команды в сценарии perl может ли perl ответить на запрос STDOUT, заданный в команде? - PullRequest
1 голос
/ 21 октября 2011

Я выполняю команду внутри сценария perl, и когда эта команда завершается, в STDOUT отправляется вопрос с запросом ответа Y или N на вопрос.Если ответа не дано (т.е. я просто заканчиваю скрипт), то у нас в оболочке зависает процесс, ожидающий ответа.Как я могу предоставить нужный ответ Y?

perl v5.8.4 solaris 10

Ответы [ 3 ]

8 голосов
/ 21 октября 2011
  • Простейшее :

    Использование возможности оболочки для перенаправления "Y" в STDIN команды:

    `echo "Y" | your_command_expecting_Y`;
    

    или (немного хуже, но большегибкий).

    `your_command_expecting_Y < /my/file/containing/one/line/with_Y_in_it.txt`; 
    
  • Более сложный, но бесконечно более гибкий и родной для Perl:

    Использование Expectмодуль

    use Expect;
    # create an Expect object by spawning another process
    my $exp = Expect->spawn($command, @params);
    $exp->send("Y\n");
    
3 голосов
/ 21 октября 2011

Предполагая, что вы всегда хотите ответить 'Y', и команда будет запрашивать только один раз :

system("echo Y | your_command_here");

Если команда будет запрашивать несколько раз, и вы всегда хотите ответить 'Y':

system("yes Y | your_command_here");

В противном случае, Expect, вероятно, является вашей лучшей ставкой, как предлагают другие.

3 голосов
/ 21 октября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...