私の~/.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/"
~/.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
を使用する理由個人的に好みで、もっと信頼できるようです。
インソーシングシェルスタートアップファイルのルールは複雑です 。 Xセッション内で新しいターミナルを開いたときに.profile
が含まれていない可能性があります(echo .profile
内に.profile
を入れて、メッセージが表示されるかどうかを確認してくださいシェルを起動したとき)。
. "$HOME/.profile"
プロファイルを手動でリロードする必要があります。
Xにログインおよびログアウトすると、.profile
もロードされます。
または、. $HOME/.profile
から.bashrc
を実行して(変数ベースのガードを使用して二重インクルードを防ぐ)、シェルを起動するたびに.profile
が常に含まれるようにすることができます。
(PATH
は既にエクスポートされた変数であり、その値を変更してもexport
ステータスは変更されないため、export PATH
を使用する必要はありません。)
.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"
このリンク にも役立つ情報があります。