私のユーザーアカウントに指定したシェルは/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
言及する価値がある1つの事実は、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チャンネルでこの問題のサポートを受けたとき、提案に基づいてこの記事をここに投稿し、これを行うように提案を受けました。