我需要创建一个包含昨天日期的变量值的路径。我需要使用 SFTP 获取文件。这是我的尝试。
#/bin/bash
TS=$(date -d '30 mins ago' +"%Y%m%d")
sshpass -p '12#$' sftp -P 2222 [email protected] <<'END_SFTP'
get /newNE/PSData$TS* /data/processedfiles
END_SFTP
但是TS
日期值没有传递给远程服务器来获取数据。
File "/newNE/PSData$TS*" not found.
有人可以帮我解决这个问题吗?
对于要在 here 文档中执行的参数扩展(以及命令替换和算术扩展和行继续处理),必须引用分隔符的任何部分,因此:
另请注意:
ps
或有时在某些记帐日志中公开可用。将它们作为环境变量传递通常很好,因为这通常被认为是私有的。更好的是使用公钥认证。您需要确保对脚本的读取权限受到限制,并且它包含该密码。#!
以解释器的路径开头。添加 a-
也是一种很好的做法。使用 just#/bin/bash
,这只是一个注释,因此在没有 shebang 的情况下,您的系统可能会运行sh
以解释脚本。bash
该脚本中没有任何特定内容,因此您最好使用sh
并删除该依赖项bash
(并且在运行脚本时可能使用更少的资源,除非您在 is 的系统上/bin/sh
)bash
。date
(对于那个非标准-d
选项),它的可移植性甚至比bash
(bash 是 GNU shell,但在非 GNU 系统上也很常见)。如果使用,您可以通过定义为(在旧版本之后)bash
来删除该依赖项。ts
printf -v ts '%(%Y%m%d)T' "$(( EPOCHSECONDS - 30 * 60 ))"
printf -v EPOCHSECONDS '%(%s)T' -1
bash