Bash
記錄 ssh shell 的輸出並保留退出狀態
我有一些腳本要
server-2
通過 ssh 在遠端伺服器()上執行server-1
,我必須將該輸出寫入名為file.log
on的日誌文件中server-1
。我正在嘗試這個:
sc.sh
echo 'testing' cp $HOME/dir1/file1 $HOME/dir2
現在,
sc.sh
通過 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
現在由於
tee -a file.log
命令,即使我在腳本文件中的命令失敗,它也將始終返回 0。如何寫入日誌文件並應檢查ssh
命令後的 if 條件,該條件應根據ssh
命令退出程式碼工作?
檢查
${PIPESTATUS[0]}
對我有用…if [ ${PIPESTATUS[0]} -eq 0 ]; then echo "successfull" fi
echo ${PIPESTATUS[*]}
列印所有管道命令的退出程式碼。
答案:“如何記錄 ssh shell 的輸出?” 是
- 使用簡單的重定向 >
例如
ssh user@remote_host "command" > local_log_file.txt
或者
sshpass -p 'psswd' ssh username@server-2 "echo 'testing'; cp dir1/file1 dir2;" > local_machine_ssh_log.txt
如果您想
cp
在遠端伺服器上檢查命令的結果,我建議在執行命令後立即在遠端主機上執行if 語句cp
作為您發送的命令的一部分就像是:
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