В вашем коде stdin
, полученный из файла results
, передается как while read...
, так иssh
(в s1
, s2
иs3
). ssh
съест все, что не было прочитано read
в первом цикле.
Попробуйте сохранить stdin
перед циклом для последующего использования с ssh:
exec {stdin}<&0
while read choice
do
case $choice in
Server1) s1 <&$stdin ;;
Server2) s2 <&$stdin ;;
Server3) s3 <&$stdin ;;
esac
done < results
Или используйте < /dev/null
, если вам не нужен стандартный ввод в ssh
.
Целью --oknodo
является предотвращение сбоя, когда система уже находится в запрошенном состоянии. Например, если вы пишете сценарий инициализации, используя start-stop-daemon
, поведение , определенное политикой Debian , состоит в том, что действие start
должно не завершаться ошибкой, если демон уже запущен, и stop
не должно не потерпеть неудачу, если демон уже остановлен; опция --oknodo
обеспечивает такое поведение.
Этот параметр существует, поскольку start-stop-daemon
предназначен для более общего использования, чем просто поддержка сценариев инициализации. Таким образом, по умолчанию происходит сбой, если он не делает то, что от него требуется.