я написал следующий скрипт:Прекратить Bash сценария зависит от централизованного выхода
#!/bin/bash
counter=0
while [ $counter -lt 250 ]; do
perl Cumulative_Percentage.pl TP53.lst T1_endo.maf >> OutFile
perl Optimize_Panel.pl TP53.LST T1_endo.maf >> TP53.lst
let counter=counter+1
done
И это хорошо работает. Проблема в том, что он часто проходит гораздо больше циклов, чем нужно. Perl-скрипт Optimize_Panel.pl печатает одну строку, если цикл должен продолжить или выйти без печати, если цикл должен остановиться. Я хочу, чтобы цикл while завершался, если Optimize_Panel.pl выходит вместо печати ... но как?
Одно из возможных решений, я могу себе представить, чтобы запустить
wc TP53.lst
в начале и в конце цикла; сначала устанавливая его на переменную, а затем проверяя, не увеличилось ли оно, а затем привело к преждевременному завершению инструкции, если TP53.lst не был добавлен. Я уверен, что это может сработать, но это неудобно, и я подозреваю, что есть гораздо более простой способ изменить сценарий оболочки.
Еще один способ, которым я могу это сделать, - это передать вывод Optimize_Panel.pl во временный файл, а затем проверить, был ли этот файл пустым.
Любые идеи?
ли это выход с успехом кодов возврата/отказа или выхода отличаются только печатает ли это или нет? –
bash проверяет статус выхода последней команды с 'if [$? -eq 0] 'после этого просто' то пусть counter = counter + 1 else exit' ... * и т. д. * @ rici - отличный подход, хотя - таким образом вам не нужно беспокоиться о касании скриптов. –