Debian 対話型シェルは .profile を呼び出しません。

Debian 対話型シェルは .profile を呼び出しません。

私は新しいDebian Busterをインストールしました:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:    10
Codename:   buster
$ cat /etc/profile
 [..]
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

[...]
$ whoami 
zozo
$ su 
Password:
# id -u 
0
# printenv | grep -i ^path 
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

ルートとして実行する場合:

  • # grep -i path /etc/profile.d/* 出力なし
  • # grep -i path ~/.profile 出力なし
  • # grep -i path ~/.bashrc 出力なし

Debian システムでは、~/.bash_profile両方~/.bash_login

vi ~/.profile 
PATH="/usr/bin:/bin:/usr/sbin:/sbin"

しかし、問題はまだ存在します。

Ctrl+D一般ユーザーに戻る

それから

$ su 
password: 

# printenv | grep -i ^path
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

だからいくつかの検索をしてみました。6.2 Bash 起動ファイル

それから

if [ -z "$PS1" ];then echo NOT interactive shell ;else echo INteractive shell ;fi
INteractive shell

それは言う:

Bashがインタラクティブなログインシェルとして呼び出されると、[...]まず[...] /etc/profile [...]を読み、実行します。 [...] 次に[...]~/.profile...を探します。

PATHだから、なぜロードされないのか(呼び出し/ロード~/.profileしない)と思います。~/.profileもちろんに入れると~/.bashrc動作します。

したがって、最後に、デフォルトではシャットダウンや再起動などの基本コマンドへのパスはありません。

systemctlまた、このようなツールは本質的に管理コマンドであり、/usr/binor /sbin/usr/sbin そして他の多くの管理コマンド、例えばgetfacl...setfaclしかしそれは別の質問です)であることを知っています。

ここに何かが欠けている必要があります。

答え1

ログインシェルのみ/etc/profileとを読むことができます~/.profile

に電話すると確認できますecho $0

出力がマイナス記号(たとえば-bosh)で始まる場合、これはログインシェルです。

したがって、変更後にログアウトして再度ログインすることをお勧めします。/etc/profile

/etc/sh.shrc/etc/bash.bashrcまたは$ HOMEの対応するファイルは、次のように提供されます。どの単純なログインシェルではなく、対話型シェルです。

あなたのシェルはログインシェルではないので、なぜこれが起こるのかを理解しようとする必要があります。テキストコンソールでログインし、シェルがsshログインシェルとして表示されていない場合は、ディストリビューションに関するバグレポートを作成する必要があります。

正しいX11環境は、新しく作成されたシェルウィンドウから始まるargv[0]すべてのシェルを起動するため、-これらのシェルは自分自身をログインシェルとして識別します。これが発生しないと、X11環境が損傷する可能性があります。

としてスーパーユーザーセッションを開始すると、suログインシェルは起動しません。これらのシェルがログインシェルのように機能するようにするには、次のように呼び出します。

su -

試してみましたか?

関連情報