내 서버의 .bashrc 파일은 비교적 간단하지만 로그인 시 자동으로 tmux에 연결되도록 하는 다음 블록이 있습니다.
echo Checking for tmux
if [ -z ${TMUX} ]
then
/usr/bin/tmux attach || /usr/bin/tmux
fi
이것은 일반적으로 잘 작동하지만 해당 서버에 scp를 시도하면 작동하지 않습니다. scp 뒤에 "세션 없음, 터미널이 아님"이 표시되면 로컬 터미널에 "tmux 확인 중" 메시지가 표시됩니다. 이 문제를 해결하기 위해 위 테스트를 다음으로 변경해 보았습니다.
if [ -z ${TMUX} ] && [ -t 0 ]
이렇게 하면 "세션 없음, 터미널이 아님" 오류가 제거되지만 파일은 자동으로 복사되지 않습니다. 위의 내용을 모두 주석 처리하면 복사본이 제대로 작동하므로 분명히 문제가 있지만 위 테스트에 실패하면 왜 영향을 미치는지 잘 모르겠습니다. 뭐가 문제 야?
답변1
비대화형 셸에서는 아무 것도 인쇄하면 안 됩니다. 일반적인 코드 조각은 다음 .bashrc
과 같습니다.
[[ $- != *i* ]] && return
처음에는 비대화형 쉘의 모든 파일을 건너뜁니다.
예를 들어 다음과 같이 미리 확인해야 합니다 echo
.
[ -t 0 ] && return
echo Checking for tmux
echo
텍스트를 편집하면 scp
계약이 깨질 수 있기 때문입니다 .