내 홈 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)"