verificando ${PIPESTATUS[0]}
funcionou para mim ...
if [ ${PIPESTATUS[0]} -eq 0 ]; then
echo "successfull"
fi
echo ${PIPESTATUS[*]}
imprime os códigos de saída de todos os comandos do pipeline.
Eu tenho algum script para ser executado no servidor remoto ( server-2
) através do ssh de server-1
e eu tenho que escrever essa saída em um arquivo de log chamado file.log
on server-1
.
Estou tentando isso: sc.sh
echo 'testing'
cp $HOME/dir1/file1 $HOME/dir2
Agora, executando o sc.sh
por meio do ssh:
sshpass -p 'psswd' ssh username@server-2 "bash -s" < sc.sh | tee -a file.log
if [ $? -eq 0]; then
echo "successfully executed the script file"
.
.
.
else
echo "failed copying due to incorrect path"
fi
Agora, devido ao comando tee -a file.log
, ele sempre retornará 0 mesmo que meus comandos no arquivo de script falhem. Como posso escrever no arquivo de log e deve verificar a condição if após o comando ssh
, que deve funcionar com base no código de saída dos comandos ssh
?
A resposta para: "como registrar a saída do shell ssh?" é
por exemplo.
ssh user@remote_host "command" > local_log_file.txt
ou
sshpass -p 'psswd' ssh username@server-2 "echo 'testing'; cp dir1/file1 dir2;" > local_machine_ssh_log.txt
Se você quiser verificar o resultado do cp
cmmand no servidor remoto, sugiro executar a instrução if no host remoto como parte do comando que você envia, imediatamente após executando o comando cp
algo como:
sshpass -p 'psswd' ssh username@server-2 "echo 'testing'; cp dir1/file1 dir2;if [ $? -eq 0 ]; then echo "successfully copied"; else echo "failed copying due to incorrect path"; fi" > local_machine_ssh_log.txt