Bash 脚本使用 ssh 和日期在远程系统上设置坐标世界时

Posted

技术标签:

【中文标题】Bash 脚本使用 ssh 和日期在远程系统上设置坐标世界时【英文标题】:Bash script set Coordinate Universal Time on remote system using ssh and date 【发布时间】:2019-05-09 12:40:48 【问题描述】:

我有一个 bash 脚本,它尝试在另一台机器上同步时间。这不是我的源代码,但是当我正在重构 bash 脚本时,我正试图让它通过 ShellCheck。

它的源代码如下所示:

d=$(date -u +%m%d%H%M%Y.%S) ssh decs@host-zc1 "sudo date -u $d"

ShellCheck 警告是 SC2029 并声明“请注意,未转义,这会在客户端扩展。”。其实我不想逃避。

是否有其他方法可以消除此警告并执行此步骤?

【问题讨论】:

【参考方案1】:

当您确定某个警告不适用于您时,您可以使用 # shellcheck disable 评论忽略它:

d=$(date -u +%m%d%H%M%Y.%S)
# shellcheck disable=SC2029
ssh decs@host-zc1 "sudo date -u $d@Q"

虽然您确实应该使用$d@Qprintf %q 来确保正确转义名称。

【讨论】:

您能否提供$d@Q 和/或printf %q 作为示例解决方案。我真的很想避免禁用 ShellCheck 警告。出现警告是有原因的。 @Kris 您收到一条信息级消息,其wiki page 表示“如果您确实希望在客户端扩展您的字符串,您可以放心地忽略此消息”。大概有很多人写ssh host "echo $HOSTNAME"并感到困惑。没有评论似乎没有解决方法,这真的太糟糕了。 是的,我正在查看链接中的 Exception 部分:github.com/koalaman/shellcheck/wiki/SC2029 无论如何,我会考虑以不同的方式编写它。我只是不明白$d@Q 是什么意思以及它到底会做什么。

以上是关于Bash 脚本使用 ssh 和日期在远程系统上设置坐标世界时的主要内容,如果未能解决你的问题,请参考以下文章

用于设置临时 SSH 隧道的 Bash 脚本

从 bash 脚本中通过 ssh 在远程主机上执行命令

sh SSH:在远程服务器上运行本地bash脚本

如何使用 bash 脚本在远程机器上运行命令?

大坑,jenkins 配置publish over ssh bash 插件,远程部署,无法执行shell脚本

有没有办法让我的笔记本电脑通过 SSH 从远程服务器上运行的 bash 脚本中发出哔哔声?