2015-10-26 2 views
0

Попытка получить этот сниппет правильно. Я хочу попытаться подключить SFTP 3 раза до того, как сломать и выйти из оболочки. Улов в том, что есть heredoc, и sftp не берет heredoc в качестве входа, когда соединение выполнено успешно; оболочка становится интерактивной, чего я не хочу.Как разместить heredoc в конце попытки соединения Bash sftp?

count=0; until sftp -o StrictHostKeyChecking=no -i $key $server ; do ((count++)); [[ $count -eq 3 ]] && echo $count && break && exit 64; done; <<END 
get docs/* 
quit 
END 
+1

heredoc - это еще один способ отправки ввода в stdin, но его нужно отправить в то, что прослушивается. Вы не отправляете его на 'sftp'. Попробуйте использовать опцию '-b' для' sftp'. – miken32

+1

BTW, я бы предложил использовать 'lftp' (который, да, поддерживает протокол sftp), а не инструмент' sftp'; даже не нужен heredoc, и есть встроенная поддержка зеркалирования каталогов и c. –

+0

Кроме того, у вас есть некоторые синтаксические ошибки bash; см. http://shellcheck.net/. –

ответ

3

Я не написал бы это так вообще (считают lftp, а не sftp), но:

count=0 
until sftp -o StrictHostKeyChecking=no -i "$key" "$server" <<END 
get docs/* 
quit 
END 
do 
    if ((count++ >= 3)); then echo "$count failures" >&2; exit 64; fi 
END 
+1

А, я поставил ';' после heredoc перед 'do'. Спасибо – simplycoding

+0

Кстати, если у вас есть вопросы о любых моих других изменениях (т. Е. Об изменении использования короткого замыкания '&&' на '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' У меня есть не стилистические причины для всех. –

+0

Не могли бы вы объяснить часть '> & 2'? Я на самом деле пытаюсь реализовать это в попытке подключения psql. В основном, я пытаюсь вывести неудачную попытку подключения psql в переменную. Если указанная переменная равна чему-то, тогда сделайте что-нибудь еще. – simplycoding

1

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

+0

Это копирует ошибку из оригинала: «break» предотвращает доступ к «exit 64». –

+0

... и еще одна ошибка: если 'echo' терпит неудачу, то это полностью пропускает' break'. –

Смежные вопросы