我用它来配置本地时间:
dpkg-reconfigure tzdata
它是ncurses 接口。我正在寻找对此进行编程的方法。有没有真正的方法没有用户 ncurses 界面?
如何通过一个 shell 命令更改本地时间?
答案1
我假设您想通过一个 shell 命令更改时区。
timedatectl
你的系统上有吗?
如果是这样:
timedatectl status
将显示您当前的设置。
timedatectl list-timezones
显示可用时区。
timedatectl set-timezone Antarctica/Mawson
设置它。
笔记:如果 RTC 配置为本地时间,这也会更新 RTC 时间。
答案2
有没有真正的方法没有用户 ncurses 界面?
echo Antarctica/Mawson >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
是的,您可以创建一个 shell 命令:
sh -c 'echo Antarctica/Mawson >/etc/timezone && dpkg-reconfigure -f noninteractive tzdata'
:)
有一个漏洞在tzdata
:某些值通过以下方式标准化dpkg-reconfigure
:
echo 'US/Central' >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Current default time zone: 'America/Chicago'
echo 'US/Eastern' >/etc/timezone
apt-get install --reinstall tzdata
# Current default time zone: 'America/New_York'
答案3
我每次都采取的方式:
# /bin/ln -fs /usr/share/zoneinfo/Asia/Novosibirsk /etc/localtime
从 Linux 到 BSD 系列,它在任何地方都可以正常工作。
答案4
当您有交互式命令时,始终可以选择使用expect
程序:
#!/usr/bin/expect -f
set timeout 360
spawn dpkg-reconfigure tzdata
expect "Geographic area:"
send -- "2\r"
expect "city or region"
send -- "134\r"
这将在标准输出“expect”中查找字符串,然后将“send”中的字符串发送到标准输入。