web-dev-qa-db-ja.com

$ HOME / bin dirが$ PATHにありません

私の~/.profile自分の個人をロードする最後のブロックがありますbin/ directory このような:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

しかし、ロードされていないようです:

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

なぜこれが機能しないのですか? (私のシェルはbashです。)

Tigger用に編集

echo $0 => bash

echo $HOME => /home/student

whoami => student

less /etc/*-release => 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
11
user106035

~/.profileの上から:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

したがって、(シェルとしてbashを使用している場合)~/.bash_profileまたは~/.bash_loginがシステム上にあると思います。 1つを選択して編集し、次の内容を含めます。

export PATH=$PATH:$HOME/bin

次に、保存してsource ~/.bash_loginまたはログアウトして、再度ログインします。

編集

~/.bash_profile~/.bash_loginの両方が$HOMEにないという。いくつか確認する必要があると思います。次の結果を元の質問に投稿してください。

echo $0
echo $HOME
whoami
less /etc/*-release

編集2

個人的には、提供された情報とドキュメントに基づいて、~/.profileがケースに含まれていない理由がわかりません。テスト中にsshを入力すると~/.profileがスキャンされますが、新しいターミナルを起動するとスキャンされないことに気付きました。

ただし、$HOME/binをインタラクティブシェルに含めることができる簡単なソリューションがあります。編集(存在しない場合は作成)~/.bashrcし、次の行を追加します。

export PATH=$PATH:$HOME/bin

保存、ログアウトして再度ログインするか、source ~/.bashrc

export行を展開して、$HOME/binが存在するかどうかを確認できます。

if [ -d "$HOME/bin" ]
then
    export PATH=$PATH:$HOME/bin
fi

別のファイルの代わりに~/.bashrcを使用する理由個人的に好みで、もっと信頼できるようです。

10
Tigger

インソーシングシェルスタートアップファイルのルールは複雑です 。 Xセッション内で新しいターミナルを開いたときに.profileが含まれていない可能性があります(echo .profile内に.profileを入れて、メッセージが表示されるかどうかを確認してくださいシェルを起動したとき)。

.  "$HOME/.profile"

プロファイルを手動でリロードする必要があります。

Xにログインおよびログアウトすると、.profileもロードされます。

または、. $HOME/.profileから.bashrcを実行して(変数ベースのガードを使用して二重インクルードを防ぐ)、シェルを起動するたびに.profileが常に含まれるようにすることができます。

PATHは既にエクスポートされた変数であり、その値を変更してもexportステータスは変更されないため、export PATHを使用する必要はありません。)

6
PSkocik

.profileをロードしたい場合は、ログインシェルを起動するだけです。

$ bash -l

実行中のセッションにはこれで十分です。ログインbashが開始される前と後のPATHを比較して、違いを確認できます。

より永続的な解決策として、ターミナル(コンソール)が起動する前のある時点でログインシェルを起動する必要があります。特定のユーザーとしてのログインは、一部のdm(ディスプレイマネージャー)(gnome、kde、xfce、lxdeなど)で発生します。必要に応じて環境変数PATHを変更するのは、それらの仕事です。

たとえば、xfceの場合、解決策はxinitrcを変更することです。

$ cat >"$HOME/.config/xfce4/xinitrc" <<-\_EOT_
#!/bin/sh

# Ensure programs in ~/bin are available for the X session.
p="$HOME/bin";
[ "$p" != "${PATH%%:*}" ] && export PATH=$p:$PATH
_EOT_
cat "/etc/xdg/xfce4/xinitrc" | tail -n+2 >> "$HOME/.config/xfce4/xinitrc"

Gnomeの場合、 変更するファイル~/.pam_environmentのようです。

KDEの場合、 このガイドに従って でファイルを作成するには、次のコードを使用できます。

$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"
1
Isaac

このリンク にも役立つ情報があります。

0
user106035