我为我的用户帐户指定的 shell/etc/passwd
未被使用。我用 更改了我的外壳chsh
,并将更改应用于/etc/passwd
.当我登录 时tty
,使用的是这个 shell,但是当我打开终端模拟器时,使用的 shell 不是 中设置的 shell /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时nautilus
,它说login
and is using ,尽管and变量zsh
的输出仍然相同。SHELL
0
答案1
模拟器很可能正在运行指定的 shell,但不是作为登录 shell,在这种情况下,它们可能会忽略 /etc/profile、.profile 等。有些允许您选择登录 shell,有些允许您指定哪个程序 -通常是一个 shell - 来运行。
答案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 在用作登录 shell 时说登录的原因是因为在我的文件中.zshrc
我有这个:
[[ -o login ]] %% echo login
当我在 IRC 频道中获得有关此问题的支持时,我根据建议将其放在这里,并建议我这样做。