我有一个脚本,它使用curl 命令向Web 服务发送请求,Web 服务的输出被写入文件。然后该文件被移动到另一个位置。
有没有办法在脚本中使用延迟(等待将输出写入文件的完成)来识别curl 命令是否已成功完成并且输出是否已写入文件?
我想避免在信息仍在写入时移动文件的情况。
感谢您的意见
答案1
为什么要使用延迟,以及为什么需要移动文件?
只需将文件写入正确的位置即可:
curl -o /path/to/correct/place/filename URL
如果 Curl 没有错误地终止,则会以零退出状态退出。仅当 Curl 成功时,您才可以使用此事实将文件移动到正确的位置:
curl -o file URL && mv file /some/place
或者,如果您需要进行一些错误报告:
if curl -o file URL; then
mv file /some/place
# or, to use sftp:
# printf 'put file\n' | sftp -b - user@host
else
printf 'Curl failed with error code "%d" (check the manual)\n' "$?" >&2
exit 1
fi
答案2
使用&&
forcurl
和mv
命令。在这种情况下,仅当之前的命令执行成功mv
时才会执行。curl
curl .... >to_file && mv to_file /to/dest
如果您需要跨 sftp 服务器移动文件,请使用以下命令。
sftp USER@HOST:/path/in/remote/dest <<< $'put /path/to/local/to_file'
甚至直接写入远程sftp路径,FILEcurl
将输出。
sftp USER@HOST:/path/in/remote/dest <<< $'put /path/to/local/"$(curl -o FILE URL)"'