내 사용자 계정에 지정한 쉘이 /etc/passwd
사용되지 않습니다. 로 쉘을 변경 chsh
하고 적용해 보았는데 /etc/passwd
로그인할 때 tty
이 쉘이 사용되었는데, 터미널 에뮬레이터를 열었을 때 사용된 쉘이 에서 설정한 쉘이 아니었습니다 /etc/passwd
.
내가 사용한 터미널 에뮬레이터에서( gnome-terminal
이 경우):
echo $0
-bash
echo $SHELL
/bin/bash
존재하다 tty
:
echo $0
-zsh
echo $SHELL
/usr/bin/zsh
내 /etc/passwd
껍질:
lcoogan:x:1000:1000:Leo Coogan:/home/lcoogan:/usr/bin/zsh
이것은 나에게 지속적인 문제였습니다. 즉, 로그인하고 로그아웃해도 아무것도 해결되지 않습니다. 해킹의 경우 소스가 없기 zsh
때문에 명령으로 실행하는 것은 이상적이지 않습니다 .~/.zprofile
Open in terminal
언급할 가치가 있는 한 가지 사실은 from을 사용할 때 and 변수에 대한 출력이 여전히 동일 하더라도 and is using이라고 nautilus
말합니다 .login
zsh
SHELL
0
답변1
에뮬레이터는 지정된 셸을 실행하지만 로그인 셸로는 실행하지 않을 가능성이 높습니다. 이 경우 /etc/profile, .profile 등을 무시할 수 있습니다. 일부에서는 로그인 쉘을 선택할 수 있고, 일부에서는 실행할 프로그램(보통 쉘)을 지정할 수 있습니다.
답변2
좋아, 내 문제를 발견했습니다. 이것은 내 .profile
파일입니다. 제거하고 나니 문제가 해결되었습니다.
이 내 꺼야.profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
EUID=`/usr/bin/id -u`
UID=`/usr/bin/id -ru`
fi
USER="`/usr/bin/id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi
HOSTNAME=`/usr/bin/hostnamectl --transient 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
if [ -n "${BASH_VERSION-}" ] ; then
if [ -f /etc/bashrc ] ; then
# Bash login shells run only /etc/profile
# Bash non-login shells run only /etc/bashrc
# Check for double sourcing is done in /etc/bashrc.
. /etc/bashrc
fi
fi
XDG_CONFIG_HOME="$HOME/.config"
export XDG_CONFIG_HOME
zsh가 로그인 쉘로 사용될 때 로그인이라고 말하는 이유는 내 파일에 .zshrc
다음이 있기 때문입니다.
[[ -o login ]] %% echo login
나는 IRC 채널에서 이 문제에 대한 지원을 받았을 때 제안을 바탕으로 이 글을 여기에 올렸고, 이렇게 하라는 제안을 받았습니다.