2015-09-01 3 views
1

У меня есть сценарий bash, запущенный в Linux, что эквивалентно Windows?Бесконтактный пакетный пакет Windows?

while ./process.sh; do sleep 1; done 

У меня есть окна пакетный файл, который я хотел бы работать, пока код возврата 0

+0

Там будет другая [очень похоже сообщение] (http://stackoverflow.com/q/5487473/5047996) относительно бесконечных циклов ... – aschipfl

+0

Я попытался использовать второй ответ, и это не сработало для меня. –

+0

Что не работает? Зачем? вы получаете сообщение об ошибке или что происходит точно? – aschipfl

ответ

4
cmd /q /e /c"for /l %%a in() do (call process.cmd || exit) & >nul timeout /t 1" 

Если вы хотите, чтобы проверить его из командной строки, изменение %%a с %a

+0

Мне это нравится! – Aacini

+0

Мне тоже! @MCND, почему вы используете 'cmd/C'? Думаю, это не нужно, не так ли? просто из-за '/ Q' ?? – aschipfl

+1

@aschipfl, нет, это потому, что я не знаю, должен ли процесс в пакетном файле вызывающего абонента продолжать работу после этой строки. Если я запускаю бесконечный 'for/l' в пакетном контексте, я могу использовать' exit', чтобы оставить его, но пакетный файл закончится. Начиная бесконечный цикл в отдельном экземпляре 'cmd' (который будет запускать код в контексте командной строки), я могу использовать' exit' или 'exit/b', чтобы покинуть цикл и продолжить запуск пакетного файла вызывающего. –

1

Я думаю, что вы ищете что-то вроде этого:

:LOOP 
timeout /T 1 /NOBREAK 
call "\path\to\your\process.sh\equivalent\batch\file" 
if not ErrorLevel 1 goto :LOOP 

Примечание : Это не работает в командной строке. Вам нужно поместить этот код в пакетный файл.

+1

'timeout' должен быть размещен _before_' call'; иначе тайм-аут изменит уровень ошибок, возвращенный командным файлом. – Aacini

+0

Спасибо за подсказку, @Aacini, я забыл об этом ... см. Мой [edit] (http://stackoverflow.com/revisions/32339498/3) ... – aschipfl