我想在我家的 git 存储库中备份一些配置文件;早些时候我一直在使用,work-tree=/
但我不再喜欢这个解决方案。现在我正在尝试创建一个脚本,该脚本采用给定的配置文件,将其复制到我的备份存储库中,将其添加到 git,然后进行提交。我的尝试是:
cp --parents $1 /home/myuser/config-BU/
chown myuser "/home/myuser/config-BU/$1"
#exit sudo
su myuser
git --git-dir=/home/myuser/config-BU/.git/ --work-tree=/home/myuser/ add "/home/myuser/config-BU/$1"
git --git-dir=/home/myuser/config-BU/.git/ --work-tree=/home/myuser/ commit -am "adding file inside BU autom" -m "$(realpath $1)"
我这样称呼它:
sudo -u myuser -E bash "/home/myuser/cp2bu.sh /etc/apt/sources.list"
并得到这个:
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
[Line 1096] Unable to connect to the compositor. If your compositor is running, check or set the WAYLAND_DISPLAY environment variable.
[1]+ Termine 253 swayidle -w timeout 300 'swaylock -f -c 000000' timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' before-sleep 'swaylock -f -c 000000'
所以最大的问题是:复制配置文件后如何“退出”sudo?或者如何重新安排脚本来避免这个问题?我应该使用吗sudo -k
?但即使使用上述解决方案(使用 sudo bash -c "/home/myuser/cp2bu.sh /etc/apt/sources.list"),我也没有将文件添加到 git repo 中,也没有看到提交在 git 日志中。
有什么建议么?
此致
答案1
su
当尝试将复杂的命令传递给类似or 的东西时,你很容易最终会引用 hell sudo
。
sudo
在这种情况下,我想最简单的方法是仅在脚本中使用:
#! /bin/bash
[[ $1 =~ / ]] && mkdir -p /home/myuser/config-BU/"${1%/*}"
sudo install -o myuser -m 600 "$1" "/home/myuser/config-BU/$1"
git --git-dir=/home/myuser/config-BU/.git/ --work-tree=/home/myuser/ add "/home/myuser/config-BU/$1"
git --git-dir=/home/myuser/config-BU/.git/ --work-tree=/home/myuser/ commit -am "adding file inside BU autom" -m "$(realpath $1)"