您尚未登录。

#1 2024-11-29 14:02:32

awdhwaf
会员
注册时间: 2024-11-29
帖子: 3

如何实现每次登陆 shell/ssh 后询问是否更新系统

我自己写了一个脚本, 就是每次登陆后提示一下

下面脚本我自己直接调用是没有问题可以正常运行的, 但是在 `.zshrc` 或者 `profile` 中添加执行脚本的命令后, 登陆后并不会正常运行

`profile` 下根本不执行, `.zshrc` 中接收不了输入, 如果想实现类似效果应该怎么做

脚本内容
```
#!/bin/bash

FLAG_WAIT="1"
FLAG_END="0"
STATUS_FILE="$HOME/.sys_update"

SYSTEMD_SCRIPT="/etc/systemd/system"

#初始化记录变量的文件, 并且在 systemd 添加定时任务, 每日更新
if [[ ! -f $STATUS_FILE ]]; then
    echo $FLAG_WAIT > $STATUS_FILE
    sudo mkdir -p $SYSTEMD_SCRIPT
    sudo tee "$SYSTEMD_SCRIPT/sys_update.service" > /dev/null << EOF
[Unit]
Description=Reset system update status

[Service]
Type=oneshot
ExecStart=/bin/bash -c "echo $FLAG_WAIT > $STATUS_FILE"
EOF
    sudo tee "$SYSTEMD_SCRIPT/sys_update.timer" > /dev/null << EOF
[Unit]
Description=Reset system update status

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
EOF
    sudo systemctl enable --now "$SYSTEMD_SCRIPT/sys_update.timer"
fi

STATUS=$(cat $STATUS_FILE)

#检查今天更新过没有, 没更新就询问
if [[ $STATUS -eq $FLAG_WAIT ]]; then
    echo "是否更新系统(y/N)"
    read -t 5 -n 1 -s ANSWER
    if [[ $ANSWER =~ ^[yY]$ ]]; then
        paru
        echo $FLAG_END > $STATUS_FILE
    fi
fi

```

离线

#2 2024-11-30 22:15:08

dilokomi
大可爱
所在地: 我家
注册时间: 2024-11-05
帖子: 3

Re: 如何实现每次登陆 shell/ssh 后询问是否更新系统

.bash_profile 是在登陆的时候执行的
.bashrc 是在打开shell的时候执行的

zsh没啥区别

建议在关机前更新而不是登陆后更新
一些软件更新后不重启可能会用不了


好耶

离线

#3 2024-12-02 14:03:38

awdhwaf
会员
注册时间: 2024-11-29
帖子: 3

Re: 如何实现每次登陆 shell/ssh 后询问是否更新系统

破案了, .p10k.zsh 导致无法输入

离线

页脚