私のホーム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
あるいは、同じコマンドに複雑なコマンドを渡そうとすると、簡単に地獄を参照することができます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)"