원격 시스템의 .bashrc 파일에 다음이 포함된 경우 scp를 통해 파일을 복사할 수 없습니다.원천이 명령은 경로와 일부 변수를 업데이트합니다. 왜 이런 일이 발생합니까?
답변1
귀하의 내용 중 일부 또는 전부를 포함해야 합니다..bashrc
아니요쉘이 비대화형일 때 실행하십시오. (An은 scp
누군가 시스템을 근본적으로 변경하지 않은 한 비대화형 쉘 호출의 예입니다.) 그런 다음 출력을 생성할 수 있는 모든 명령을 파일의 해당 섹션에 넣으십시오.
init 파일에서 이를 수행하는 표준 방법은 다음과 같습니다.
# Put all the commands here that should run regardless of whether
# this is an interactive or non-interactive shell.
# Example command:
umask 0027
# test if the prompt var is not set and also to prevent failures
# when `$PS1` is unset and `set -u` is used
if [ -z "${PS1:-}" ]; then
# prompt var is not set, so this is *not* an interactive shell
return
fi
# If we reach this line of code, then the prompt var is set, so
# this is an interactive shell.
# Put all the commands here that should run only if this is an
# interactive shell.
# Example command:
echo "Welcome, ${USER}. This is the ~/.bashrc file."
사용하는 사람들도 볼 수 있습니다.
[ -z "${PS1:-}" ] && return
나의 더 긴 진술보다는 if
.
전체 파일을 다시 정렬하지 않으려면 다음과 같이 특정 줄을 래핑하여 대화형 컨텍스트에서만 실행할 수도 있습니다.
if [ -n "${PS1:-}" ]; then
echo "This line only runs in interactive mode."
fi
이런 방식으로 격리하면 .bashrc
명령 scp
에 더 이상 이 문제가 발생하지 않습니다.
답변2
이 솔루션은 나에게도 효과적입니다. 하지만 내 기본 셸은 TCSH이므로 다음과 같이 수정 사항을 약간 수정해야 했습니다(.tcshrc에서).
if ( $?SSH_TTY ) then
exec /bin/bash
endif
모두의 이익을 위해 공유해야겠다고 생각했습니다.