bashrc를 사용하여 Fish를 열면(존재하는 경우) scp 문제가 발생합니다.

bashrc를 사용하여 Fish를 열면(존재하는 경우) scp 문제가 발생합니다.

상태:여러 원격 서버에 로그인해야 하며 그 중 일부에는 Fish 쉘이 있음

필요하다:기본 쉘은 bash입니다. 서버에 로그인했는데 Fish가 있으면 Fish 쉘로 전환하고, 그렇지 않으면 bash를 유지합니다.

.bashrc를 시도했습니다.

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Source global definitions
if [ -f /etc/bash.bashrc ]; then
        . /etc/bash.bashrc
fi

# Update Path
export PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH:$HOME/.bin

# Open fish shell if present, otherwise stick to bash
if hash fish 2>/dev/null; then
        # echo "Fish detected, shifting shell"
        fish "$@"; exit
fi

그러나 scp가 작동하지 않는 것 같습니다. 파일을 scp하려고 하면 자세한 출력에 파일이 여기에 붙어 있다고 표시됩니다.

debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending env LC_ADDRESS = en_US.UTF-8
debug1: Sending env LC_IDENTIFICATION = en_US.UTF-8
debug1: Sending env LC_MEASUREMENT = en_US.UTF-8
debug1: Sending env LC_MONETARY = en_US.UTF-8
debug1: Sending env LC_NAME = en_US.UTF-8
debug1: Sending env LC_NUMERIC = en_US.UTF-8
debug1: Sending env LC_PAPER = en_US.UTF-8
debug1: Sending env LC_TELEPHONE = en_US.UTF-8
debug1: Sending env LC_TIME = en_US.UTF-8
debug1: Sending command: scp -v -f test_file

echo처음에는 이 명령으로 인해 작동하지 않는 줄 알았는데 , 이 명령이 없으면 작동하지 않습니다.

답변1

파일을 가져온 셸 세션이 대화형이 아닐 때 파일을 종료 하려면 bashrc파일 상단(또는 편리한 위치)에서 다음을 수행할 수 있습니다.

case "$-" in
    *i*)        ;;
    *)   return ;;
esac

값은 $-현재 설정된 쉘 옵션을 나타내는 문자열입니다. i이 문자가 문자열에 있으면 쉘은 대화형입니다 .

terdon이 주석에서 지적했듯이 Bash는 sshdSSH 데몬에 의해 시작된 셸 세션을 특별한 경우로 처리하기 때문에 이것이 필요할 수 있습니다.

세부 사항:bashrc가 현재 쉘이 대화형인지 확인하는 이유는 무엇입니까?

파일 아래에서 쉘이 fish사용 가능하고 시작되었는지 확인할 수 있습니다.

if command -v fish 2>/dev/null; then
   exec fish
fi

일부 시스템 에서는 fish"Go Fish" 게임일 수 있습니다. :-)

사용 정보 command -v:" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?

관련 정보