我的 ksh 脚本中有下面的代码片段。有没有一种方法可以让我获得 sftp 是否成功执行并将文件从源复制到目标目的地的返回代码?
echo "sftp start" >> /test/logfile.log
sftp user@server <<EOF >> /test/logfile.log
cd /tgt/files
lcd /src/files
rm *.csv
put -p *.csv
exit
EOF
echo "sftp end" >> /test/logfile.log
Run Code Online (Sandbox Code Playgroud)
mad*_*kse 11
Gilles Quenot 的解决方案仅适用于以下三个改进。如果没有这些改进,无论 sftp 命令的结果如何,退出状态将始终为 0。
-b -sftp命令需要添加sftp选项。只有这样,如果某些 sftp 命令出错,sftp 才会以状态 1 退出。否则退出状态始终为 0。
我2>&1 | tee还添加了错误日志(它将 stderr 重定向到 stdout)
您必须使用${PIPESTATUS[0]}来读取 sftp 的退出状态。$?给出最后一个命令的退出状态,即重定向到日志文件。
Run Code Online (Sandbox Code Playgroud)echo "sftp start" >> /test/logfile.log sftp -b - user@server <<EOF 2>&1 | tee /test/logfile.log cd /tgt/files lcd /src/files rm *.csv put -p *.csv exit EOF exit_code=${PIPESTATUS[0]} if [[ $exit_code != 0 ]]; then echo "sftp error" >&2 exit 1 fi echo "sftp end" >> /test/logfile.log
问候, 马丁