Как запустить команду ssh до тех пор, пока она не будет успешной?

хорошо, вот что у меня получилось

#!/bin/bash
fname=$1
sed 's/\r$//' "$fname"    |\
grep -v -- "-->"          |\
grep -v "^$"              |\
grep -E -v "^[0-9]+$"     |\
sed 's/WEBVTT//'          |\
tr '\n' ' '               |\
tr -s ' '                 |\
tr -d '\t'                |\
sed 's/\\/\\\\/g'         |\
sed 's/"/\\"/g' 
  1. исправить новые строки в окнах
  2. найти все строки, у которых нет ->
  3. найти все строки, которые не пустые (я думаю, что это быстрее, а может и нет)
  4. найти все строки, которые не являются просто числами
  5. удалить заголовок WEBVTT
  6. удалить новые строки
  7. сжать несколько пробелов до 1
  8. удалить вкладки
  9. избежать любых обратных косых черт (для json)
  10. избежать любых двойных кавычек (для json)

Спасибо @steeldriver за исправление для новых строк Windows.

Я бы не стал использовать это в продакшене, так как он немного слабоват, например, он пропускает строки текста типа «ты -> мой друг» и, возможно, несколько других случаев, но для моих целей этого должно быть достаточно ( отправка в solr для поиска)

Я понимаю, что это довольно неэффективно. Буду признателен за советы по этому поводу.

28
16.11.2017, 09:01
2 ответа
while ! ssh user@host.example.com true; do
    sleep 5
done; echo "Host is back up at $(date)!"
15
27.01.2020, 19:38

Другим вариантом может быть использование until.

until ssh me@device.local; do
    sleep 5
done

Если вы делаете это неоднократно для нескольких хостов, поместите это в функцию в вашем ~/.bashrc.

repeat()
{
read -p "Enter the hostname or IP of your server :" servername
until ssh $servername; do
    sleep 5
done
}
45
27.01.2020, 19:38

Теги

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