bash 脚本用于备份 git repo 中的配置文件并复制其路径

bash 脚本用于备份 git repo 中的配置文件并复制其路径

我想在我家的 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)"

相关内容