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


11

~/.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です。)

ティガーの編集

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/"

のこの部分の背景については.profileaskubuntu.com / questions / 284640を参照してください。
JdeBP 2017

これはどのシェルですか?
njsg 2017

2
ディレクトリが存在すると思いますよね?
Bolliを

@njsgそれはbashです

これが実行された後、おそらく何か他のものがPATH変数をリセットしています。-xbashに渡されたフラグを使用して、PATHがリセットされた場所を確認することで確認できます。また、export PATH="$HOME/bin:$PATH"後続のプロセスに提供する必要があります。
Charles Addis 2017

回答:


10

上から~/.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、あなたのシステムにいるのでしょう。いずれかを選択して編集し、次を含めます。

export PATH=$PATH:$HOME/bin

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

編集

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

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

編集2

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

ただし、$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別のファイルの代わりに?個人的に好みで、もっと信頼できるようです。


質問者はどのシェルを指定しなかったので、Bourne Againシェルをまったく使用していない可能性もあります。確かに、この同じ質問を持つ他の人々はそうではないかもしれません。
JdeBP 2017

@JdeBP:回答の明確化を追加。Debianユーザーとして、彼らはデフォルトの対話型シェルを変更していなかったと仮定しましたが、私はそうすることができたと思います。
Tigger 2017

私は何も持っていませ~/.bash_profile~/.bash_login。私~には.bash_historyand .bash_logout(そしてもちろん.profile)しかありません。

@Tiggerが更新されました!

@student:別の更新を行いました。本当に何が起こっているのか途方に暮れています。なぜ~/.profileスキップされているのかを見つけたら、聞いてかなり興味があります。
Tigger

6

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

.  "$HOME/.profile"

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

Xへのログインとログアウトも.profileロードの原因となります。

また、あなたが行うことができます. $HOME/.profileから.bashrc確認すること(ダブル混入を防止するために、変数ベースのガードを使用しながら).profileあなたはシェルを起動するたびに常に含まれています。

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


.bashrcから.profileを調達しています!ほとんどの場合、.profileには `が含まれます。.bashrc`、これは無限ループに陥りませんか?!
ジョナ

@youness両方を実行していて、インクルードガード([ -z "$has___profile" ] || return; has__profile=1)を使用しているので、無限ループ.profile.bashrc(BASH_VERSIONが定義されている場合のみ)両方を取得できません。
PSkocik 2017

わかった !私の悪い英語は私にこの不要な質問をするように促しました(説明のためにコードを置くことは文字通りの表現よりも優れています)。お時間をいただきありがとうございます:-)
ジョナ

単純なものbash -lがロードされます.profile(奇妙な構成を除く)。また、ユーザーがログインするときにPATHが正しく設定されている必要があります。つまり、使用中の「ディスプレイマネージャー」(dm)でgnome、KDE、xfce、lxdeなど
Isaac

1

あなたが取得したい場合は.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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.