Bash, команда на удаленном сервере возвращает true в случае неудачи - PullRequest
0 голосов
/ 12 июня 2019

Команда, выполненная на удаленном сервере, возвращает true, даже если не удалось.Вот код.

command="
sudo su - postgres -c 'pg_dump -Fc ${var[1]}'
"

if
ssh -n -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$username"@"${var[0]}" "$command" > "$folder_export"/"${var[0]}"/"$date"-"$time"-"${var[0]}"-"${var[1]}".dump
export_end=$date-$time
then
export=true
else
export=false
fi

Я пытался остановить postgres на удаленном сервере.Вывод показывает мне это.

pg_dump: [archiver (db)] connection to database "coopweb" failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Но если условие возвращает true.Я не знаю почему.Может быть, какая-то опция в команде ssh неверна?Или в чем проблема?

Спасибо.

1 Ответ

2 голосов
/ 12 июня 2019

В вашем утверждении код возврата, оцененный в выражении if, является кодом возврата присваивания переменной export_end. Одним из решений было бы переместить это назначение в ветки if / else:

 ...
 if ssh -n -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$username"@"${var[0]}" "$command" > "$folder_export"/"${var[0]}"/"$date"-"$time"-"${var[0]}"-"${var[1]}".dump
 then
   export_end=$date-$time
   export=true
 else
   export_end=$date-$time
   export=false
 fi
...