циклы PowerShell Bash случайно застряли в ожидании ввода с клавиатуры - PullRequest
2 голосов
/ 29 января 2010

У меня есть скрипт bash, который я запускаю из powershell в Windows, который выполняет цикл for. Время от времени одна итерация цикла зависает, пока я не нажму клавишу ввода на клавиатуре.
Это не происходит все время, на самом деле, это случается довольно редко, но все же происходит.

Интересно то, что мой внутренний цикл в основном равен time _command_, и поэтому после того, как я нажму enter, он скажет мне, сколько времени понадобилось команде для запуска. На самом деле выполнение команды занимает намного меньше времени, чем итерация цикла - потому что по какой-то странной причине она ожидает ввода с клавиатуры.

Довольно неприятно оставлять сценарий включенным на ночь и возвращаться утром, чтобы убедиться, что он не очень далеко зашел.

Кто-то знает, ПОЧЕМУ это происходит и ЧТО делать, чтобы обойти это?

Спасибо, JBU

Ответы [ 3 ]

5 голосов
/ 09 октября 2011

Я сталкивался с одной и той же проблемой несколько раз. Теперь, я думаю, я нашел причину!

Если вы когда-нибудь нажмете кнопку мыши внутри PowerShell, она может застрять, и пользователю потребуется нажать «ввод», чтобы продолжить. Так что обходной путь - убедиться, что вы случайно не нажали мышь в окне оболочки, пока вы уже запускаете какую-то программу ...

0 голосов
/ 21 октября 2015

Перейдите в свойства powershell и снимите флажки 'Quick Edit'/'Insert'. Если они выбраны, консоль приостанавливает вывод и возобновляет работу только тогда, когда нажата клавиша Enter (Вы можете определить это по мониторингу строки заголовка консоли - она ​​переключится с "Administrator:Windows PowerShell" на "Select Administrator:Windows Powershell"

0 голосов
/ 29 января 2010

Пока вы не опубликуете сценарий, мы мало что можем сделать, чтобы помочь.

Однако, как правило, одна из ваших команд время от времени возвращает нулевое значение в качестве входных данных для stdin другой команды, которая, увидев null, смотрит на терминал как stdin. Или что-то в этом роде.

...