직장에서 여러 GitHub 계정을 사용하므로 직장 계정을 추가하려면 원격 URL을 수정해야 합니다. 재귀적으로 find -execdir과 /sed/set 원격 URL을 얻는 방법을 알아냈지만 이를 결합할 수는 없습니다.
git st를 사용하여 find 명령을 테스트했는데 잘 작동합니다.
find . -type d -name ".git" -execdir zsh -c "git st" \;
git set 프로세스를 테스트했는데 잘 작동합니다.
git remote set-url origin $(git remote get-url origin | sed 's|https://github|https://my_work_username@github|g')" \
그것들을 결합하면 잘 작동하지 않습니다.
find . -type d -name ".git" -execdir zsh -c "git remote set-url origin $(git remote get-url origin | sed 's|https://github|https://my_work_username@github|g')" \;
처음에는 .git 폴더가 없고 여러 git 구문 오류가 있다는 오류가 발생했습니다.
치명적: git 저장소(또는 상위 디렉터리)가 아님: .git 사용법: git 원격 set-url [--push] [] 또는: git 원격 set-url --add 또는: git 원격 set-url --remove
에코를 추가하면 내가 실행하는 git 명령은 다음과 같습니다.
git remote set-url origin
매개변수 없음
이 문제를 해결하기 위한 아이디어가 부족하거나 용어를 검색하고 있습니다.
답변1
find . ... -execdir zsh -c "git remote get-url origin $(git ...)" \;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
여기서 명령 대체는 큰따옴표로 묶인 문자열 안에 있으므로 기본 셸에서 확장됩니다.앞으로달리기를 찾아보세요. 그런 다음 잘못된 디렉터리에서 실행되어 오류가 발생합니다. set -x
명령을 활성화하고 실행하면 zsh -c
명령줄에 상수 문자열이 표시되어야 합니다.
이와 같이:
$ set -x
$ find . -type d -execdir bash -c "echo $RANDOM" \;
+ find . -type d -execdir bash -c 'echo 22924' ';'
22924
22924
...
내부 셸이 이를 보고 처리를 시작할 수 있도록 작은따옴표를 사용하여 확장을 보호해야 합니다.
$ find . -type d -execdir bash -c 'echo $RANDOM' \;
+ find . -type d -execdir bash -c 'echo $RANDOM' ';'
4397
21235
...
sed 명령에는 작은따옴표 안에 있어야 하는 내용이 포함되어 있지 않기 때문에 기본적으로 여기에서 작은따옴표와 큰따옴표를 뒤집을 수 있다고 생각합니다.
find . -type d -name ".git" -execdir \
zsh -c 'git remote set-url origin "$(
git remote get-url origin |
sed "s|https://github|https://my_work_username@github|g"
)"' \;
(완전성을 위해 명령 대체 주위에 큰따옴표를 넣어 내부 쉘 명령 내에서 단어 분할을 방지하십시오. 여기의 URL에 공백이나 와일드카드가 포함될 수는 없지만 이는 좋은 습관입니다.)
sed 명령에 이와 같은 것이 있고 $
작은 따옴표로 묶인 문자열 안에 작은 따옴표를 넣어야 하는 경우 예를 들어 더 추악한 이스케이프를 수행 'it isn'\''t so'
하거나 명령을 여러 파일로 분할해야 합니다. 이는 일반적으로 간단한 솔루션입니다. 인용된 문제에.