원격 컴퓨터의 .bashrc에 소스 명령이 포함되어 있으면 scp를 실행하세요.

원격 컴퓨터의 .bashrc에 소스 명령이 포함되어 있으면 scp를 실행하세요.

원격 시스템의 .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

모두의 이익을 위해 공유해야겠다고 생각했습니다.

관련 정보