2017-09-03 2 views
2

나는 다른 장소에서 엄청나게 많은 기계가 (홈 네트워크, 클라우드, ...) 나는 그들 각각에 fish를 사용합니다. 문제는 거기에서 뭔가를 변경할 때마다 구성을 동기화해야한다는 것입니다.원격 저장소에서 물고기 구성을로드하는 방법은 무엇입니까?

원격 저장소에서 구성을로드 할 수있는 방법이 있습니까? (가 반드시, git 저장 될 장소를 =하지만 이상적으로 나는 GitHub의에서 관리 것이다). 그러한 경우 나는 어디에서나 하나의 라이너 만 가질 것입니다.

  • 내가 (예를 들어 Ansible를 통해) 컴퓨터에 구성을 밀어 수 없습니다
  • 마다 허용 될 수는 config를로드, 시작 시간에 대해 너무 많이 걱정하지 않는다 - 아니 그 모든 곳에서 직접 연결할 수 - 그러나 그들 모두가 인터넷을 도달 할 수
  • 질문에 두 부분이 있습니다

답변

3

. 1 부는 물고기에 특유하지 않습니다. 정기적으로 사용하는 시스템의 경우 Dropbox를 사용합니다. 내 ~/.config/fish 디렉토리를 Dropbox 디렉토리에 넣고 심볼릭 링크를 넣는다. 배포본에 고유 한 문제를 조사하는 데 사용하는 VM과 같이 자주 사용하지 않는 컴퓨터의 경우 rsync를 사용하여 내 주 데스크톱 컴퓨터에서 복사합니다. 예를 들어,

rsync --verbose --archive --delete -L --exclude 'fishd.*' [email protected]:.config . 

참고 fishd.* 패턴의 배제. 그것은 당신의 질문의 두 번째 부분이며 물고기에게 독특한 것입니다. 해당 패턴으로 명명 된 ~/.config/fish 디렉토리의 파일은 범용 변수 저장 공간이며 현재 각 시스템마다 고유합니다. 우리는 그것을 바꾸고 싶습니다 - https://github.com/fish-shell/fish-shell/issues/1912을보십시오. 문제는 파일에 색상 테마 변수가 포함되어 있다는 것입니다. 그래서 색상 테마 하나 개의 시스템에 그 바르 수출 필요 복사 :

set -U | grep fish_color_ 

그런 다음 위 명령 출력의 각 행에 대해 새 시스템에 set -U을하고. 분명히 동기화하려는 다른 범용 변수가있는 경우 set -U을 가져와 모두 가져와야합니다.

+0

다음
이 전체 스크립트 파일 당신의 config.fish 실행에 mv $TMP_CONFIG ~/.config/fish/shared_config.fish, 감사합니다. 당신의 대답 중 하나는 제가 피하고 싶었던 것입니다. 일부 클라우드에서 클라우드 스토리지를 사용할 수 없으며 각각의 구성을 개별적으로 동기화하지 않아도됩니다. 나는 그 자체로 설정을 가져올 물고기 설정을 원했다. 그것을 구현하지 않는 경우에, 나는 git이 cron 작업으로 끌어 당길 것이다. 대답의 두 번째 부분은 매우 유익합니다. 감사합니다! – WoJ

0

면책 조항 :이 솔루션 나 자신을 선택하지 않을 것입니다. Kurtis Rader가 제안한 클라우드 스토리지 클라이언트를 사용하거나 git 저장소 (+ symlinks)에서 변경 사항을 가져 오기위한주기적인 cron 작업이 훨씬 쉽고 오류가없는 것처럼 보입니다. 당신이 또는 클라우드 스토리지와 동기화하지 않을 수없는 이러한 시스템에


, 당신은 예를 들어 curl를 사용하여, 특히 구성 파일을 다운로드 할 수 있습니다. 일부 중요한 I/O 시간은 HTTP 캐시 제어 메커니즘을 사용하여 절약 할 수 있습니다. 캐시 제어의 유무에 관계없이 매번 (또는 각 X 시간 또는 각 Y 시간이 경과하면) 원격 서버에 대한 연결을 만들어야하며, 이는 이미 꽤 많은 시간을 낭비합니다.

#!/usr/bin/fish 

set -l TMP_CONFIG /tmp/shared_config.fish 

curl -s -o $TMP_CONFIG -D $TMP_CONFIG.headers \ 
-H "If-None-Match: \"$SHARED_CONFIG_ETAG\"" \ 
https://raw.githubusercontent.com/woj/dotfiles/master/fish/config.fish 

if test -s $TMP_CONFIG 
    mv $TMP_CONFIG ~/.config/fish/conf.d/shared_config.fish 
    set -U SHARED_CONFIG_ETAG (sed -En 's/ETag: "(\w+)"/\1/p' $TMP_CONFIG.headers) 
end 

참고 :

  • 경고 : 아니 거의 충분한 테스트
  • fish V2를 가정

    은 다음은 시작하는 등 물고기 스크립트에 대한 제안입니다 .3 이상.

  • sed 동작은 플랫폼에 따라 다릅니다.
  • woj/dotfiles/master/fish/config.fish을 사례에 적용되는 저장소, 지점 및 경로로 바꿉니다.

당신은 cron 작업에서이 작업을 실행,하지만 당신은 모든 초기화에 구성 파일을 업데이트 주장하는 경우, 이미 자동으로 fish에 의해로드 아니에요 경로, 예를 들면의 구성을 배치 스크립트를 변경할 수 있습니다

source ~/.config/fish/shared_config.fish