최근에 랩톱과 PC를 동기화하려고 할 때마다 Unison에서 이상한 오류가 발생했습니다. bashrc
터미널을 열 때마다 보류 중인 작업을 인쇄하는 줄을 추가했다는 것을 깨달았습니다 .
광산에 추가된 라인 bashrc
:
task list #this command comes from a small utility called taskwarrior
오류는 다음과 같습니다.
Received unexpected header from the server:
expected "Unison 2.40\n" but received "\nID Proj Age Description\n-- -------- --- -----------------------------\n 2 11d Do the research work\n 3 Life 11d Get stickynotes from stationary\n 1 Technical 11d Fix the error\n\n3 tasks\n",
which differs at "\n".
This can happen because you have different versions of Unison
installed on the client and server machines, or because
your connection is failing and somebody is printing an error
message, or because your remote login shell is printing
something itself before starting Unison.
오류 로그에 언급된 대로 my login shell is printing something itself before starting Unison
.this가 실제로 문제의 원인입니다.
이제 두 가지 질문이 있습니다.
bashrc에서 Unison 헤더 뒤에 "Task List" 메시지를 인쇄하도록 하려면 어떻게 해야 합니까? 또는 "작업 목록"이 전혀 인쇄되지 않도록 ssh 세션에서 별도의 RC 파일을 로드하도록 할 수 있습니까?
무엇이든 인쇄해도 안전합니까? 즉, Unison 헤더 다음에 작업 목록을 인쇄하면 헤더의 추가 정보로 인해 동기화 중에 데이터가 손상될 가능성이 있습니까?
PS: Unison은 두 시스템 간의 통신을 위해 SSH를 사용합니다.
답변1
그렇지 않은 경우 스크립트의 출력(예: rc 파일)이 터미널인지 테스트할 수 있습니다. 그렇다면 출력 텍스트는 안전해야 하며, 그렇지 않은 경우에는 아무것도 출력하지 않습니다.
if [ -t 0 ]; then
# check your jobs here and print any info you want to see
fi
답변2
i
다음을 검색하여 현재 대화형인지 확인할 수 있습니다 $-
.
if expr "$-" : '.*i' >/dev/null; then
echo interactive
fi