银河麒麟V10 SP1 2403 Shell脚本问题

因为某些原因需要使用Shell脚本进行批量安装软件,在脚本中使用下面的命令获取root权限

# 获取 root 权限
if [[ "$EUID" -ne 0 ]]; then
    echo "请输入开机密码获取 root 权限..."
    sudo bash "$0" "$@"
    exit $?
fi

银河麒麟V10 SP1 2303版本使用一切正常,直到某天遇到了一台2403的系统,发现在执行脚本后会报错,提示“sed: 无法移除 /etc/sedu0NzgE:权限不够”,因为路径位于/etc且sed会创建一个临时文件然后替换原文件,所以很明显是权限问题,但问题是同样的脚本在2303中正常,在2403中却不行,所以想请教各位大佬有没有办法解决这个问题

补充一下:手动打开终端,将脚本中的sed命令行单独复制出来,加上sudo后执行是正常的

再补充一下:将这台2403的电脑接入外网,手动打开终端,执行sudo apt install --only-upgrade kylin-connectivity(kylin-connectivity在应用商店中叫“多端协同”,直接在应用商店更新也能达到相同效果),再执行之前的脚本,又恢复正常了,但这不是我想要的解决方法 :rofl:

是不是第一次sudo需要密码,后面不需要才这样的

脚本中使用了获取root权限命令,后续命令中就不需要再使用sudo了

简单的说就是:在/etc目录中使用sed对文件进行修改时,打开终端手动输入 sudo sed -i 是正常的,但是你写一个.sh脚本,在脚本中再用sudo sed -i 命令就会提示权限不够

如果有条件的话可以按我说的实验一下,这样会更清晰

另外这个问题我已经找到解决方法,如果是外网:使用 sudo apt install --only-upgrade kylin-connectivity 可以解决,如果内网:需要在外网使用 apt download 下载 kylin-connectivity 和它需要的 3 个依赖,拷贝到内网后,再使用 dpkg -i 安装就好了

我目前的问题是想找到一个更简单的解决方法,这个问题很明显是麒麟系统的BUG,用我这个方法来处理还是有点繁琐了