4

我正在尝试通过 Fabric 更改远程服务器的时区,如下所示:

run("export TZ=\":Pacific/Auckland\"")
运行(“日期”)

这似乎不起作用。run("date")给我: Tue Apr 19 00:19:58 CDT 2011这不是我刚刚设置的时区。

如果我只是登录到服务器并运行相同的 bash 命令,一切都和预期的一样:

[lazo@lazoweb]$ 日期
2011 年 4 月 19 日星期二 00:20:00 CDT
[lazo@lazoweb]$ export TZ=":Pacific/Auckland"
[lazo@lazoweb]$ 日期
2011 年 4 月 19 日星期二 17:20:20 新西兰标准时间

任何人都可以对此有所了解吗?我错过了什么?

4

3 回答 3

4
run("export TZ=\":Pacific/Auckland\"")
run("date")

就好像

/bin/sh -c 'export TZ=":Pacific/Auckland"'
/bin/sh -c 'date'

您正在启动一个 shell,设置它的一个环境变量,然后退出它。它从来没有机会将该环境变量传递给任何人。

在脚本环境中设置 TZ 然后运行date​​. 我不知道 Python,但它似乎是

os.environ['TZ'] = ":Pacific/Auckland"
run("date")
于 2011-04-19T05:47:35.993 回答
2

由于 ikegami 解释了环境的原因,这两个单独的命令将不起作用。但是,您可以通过以下方式实现您的愿望:

run("TZ=':Pacific/Auckland' date")
于 2011-05-16T18:55:09.980 回答
1

这仅适用于当前 shell。关闭 shell,启动一个新的并输入date,您将看到 TZ 已重置为默认时区。即使对于 Fabric,如果您捕获输出,您也会看到 TimeZone 确实设置正确,但随着脚本的结束,shell 也如此,因此 TZ 变量不再可用。

于 2011-04-19T05:41:27.093 回答