Повторите терминальную команду, пока не указано не произведено

Я хотел бы определить псевдоним, который выполняет команду каждый x секунды, пока базовый процесс не дает обозначенный вывод. Затем команда должна прекратить выполняться.

Действительно ли это возможно, и если так, как? Справка очень ценится.

Я почти удовлетворен

alias test1='while true; do <command>; sleep 1; done'

кроме я должен вручную остановить его и не могу поэтому заставить его выполнить новую команду, однажды законченную.

Причина вопроса: Dropbox синхронизируется плохо на работе. Иногда, я должен перезапустить его. Я хотел бы сделать то использование команды, которая также говорит, когда синхронизация сделана, например,

alias drop='dropbox stop && dropbox start && while true; do dropbox status; sleep 1; done'

Я хотел бы повторение, остановленное когда 'Актуальные' выводы Dropbox.

7
задан 23 February 2016 в 03:36

3 ответа

Установите условие для цикла с условием продолжения

, Если Вы заменяете

while true

:

while [ "$(dropbox status)" != "Up to date" ]

это работает, как Вы описываете.

команда

Для останавливаний/начинания Dropbox и конец после синхронизации сделана, становится затем:

dropbox stop && dropbox start && while  [ "$(dropbox status)" != "Up to date" ]; do dropbox status; sleep 1; done

Или лучше (для предотвращения удвоения dropbox status):

dropbox stop && dropbox start && while  [ "$(dropbox status)" != "Up to date" ]; do echo "Updating"; sleep 1 ; done && echo "Finished"

Объяснение

while true ожидает условия повреждения в цикле (который никогда не прибывает), но while [ "$(dropbox status)" != "Up to date" делает разрыв замкнутой цепи если dropbox status возвраты Up to date

9
ответ дан 23 November 2019 в 06:15

Как Jacob говорит, используйте условие на цикле. Я предлагаю until цикл:

dropbox stop && dropbox start && 
until dropbox status | grep -q "Up to date";
do 
  sleep 1; 
done

until выполнения до команды возвращают true, именно тогда dropbox status, вывод содержит Up to date.

5
ответ дан 23 November 2019 в 06:15

Определите его как функцию в Вашем $HOME/.bashrc

syncDropBox()
{
dropbox stop && \
dropbox start && 
while true; 
do 
  STAT="$(dropbox status)"
  if [ "$STAT" = "Up to date"  ] ; then
  break # or add more commands to finilize the process
  fi
  sleep 1; 
done
}

Теперь, я не имею dropbox cmd приложение, таким образом, в зависимости от пути это производит состояние, Вы можете или не можете обработать его с AWK или grep.

, Но точка, являющаяся этим, можно или сохранить вывод, чтобы оценить или перенаправить вывод к другой команде и оценить их. После того как мы получаем определенную выходную строку - повреждение

1
ответ дан 23 November 2019 в 06:15

Другие вопросы по тегам:

Похожие вопросы: