상태:여러 원격 서버에 로그인해야 하며 그 중 일부에는 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는 sshd
SSH 데몬에 의해 시작된 셸 세션을 특별한 경우로 처리하기 때문에 이것이 필요할 수 있습니다.
세부 사항:bashrc가 현재 쉘이 대화형인지 확인하는 이유는 무엇입니까?
파일 아래에서 쉘이 fish
사용 가능하고 시작되었는지 확인할 수 있습니다.
if command -v fish 2>/dev/null; then
exec fish
fi
일부 시스템 에서는 fish
"Go Fish" 게임일 수 있습니다. :-)
사용 정보 command -v
:" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?