web-dev-qa-db-fra.com

$ Home / bin Dir n'est pas sur le chemin $

Dans mon ~/.profile J'ai un dernier bloc qui devrait charger mon bin/ directory comme ça:

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

Mais il est apparemment pas chargé:

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

Pourquoi cela ne fonctionne-t-il pas? (Ma coquille est bash.)

Modifier pour 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

Du haut de ~/.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.

Donc (si vous utilisez bash comme votre coquille), je suppose que ~/.bash_profile ou ~/.bash_login est sur votre système. Sélectionnez un et modifiez-le pour inclure:

export PATH=$PATH:$HOME/bin

Ensuite, enregistrez et source ~/.bash_login ou déconnectez-vous et reconnectez-vous.

éditer:

Vous dites que les deux ~/.bash_profile et ~/.bash_login sont manquants de votre $HOME. Je pense que nous avons besoin de confirmer quelques choses. Veuillez poster les résultats des éléments suivants dans votre question initiale:

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

Edit 2:

Personnellement, je ne sais pas pourquoi ~/.profile n'est pas inclus dans votre cas en fonction des informations fournies et de la documentation. Tout en testant, j'ai remarqué que mon ~/.profile est numérisé lorsque je ssh in mais pas lorsque je lance un nouveau terminal.

Mais, il existe une solution simple pour permettre à $HOME/bin à inclure dans votre coquille interactive. Modifier (Créer s'il n'est pas présent) ~/.bashrc et ajoutez-y la ligne suivante:

export PATH=$PATH:$HOME/bin

Enregistrez, déconnectez-vous et reconnectez-vous dans ou source ~/.bashrc.

La ligne export pourrait être étendue pour vérifier que $HOME/bin existe si vous le souhaitez:

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

Pourquoi ~/.bashrc au lieu d'un autre fichier? Personnellement la préférence et semble être plus fiable aussi.

10
Tigger

Les Règles pour les fichiers de démarrage shell d'approvisionnement sont complexes . Il est probable que avec votre configuration, .profile ne pas être inclus lorsque vous ouvrez un nouveau terminal dans une session x (essayez de mettre un echo .profile à l'intérieur de .profile et voir si le message apparaît lorsque vous démarrez une coquille).

.  "$HOME/.profile"

devrait recharger le profil manuellement.

Se connecter et sortir de x devrait également causer .profile charger.

Alternativement, vous pouvez faire . $HOME/.profile de .bashrc (lors de l'utilisation d'une protection à base de variable pour empêcher la double inclusion) pour vous assurer que .profile est toujours inclus chaque fois que vous démarrez une coquille.

(Vous ne devriez pas avoir besoin de export PATH _ _ PATH est déjà une variable exportée et modifier sa valeur ne changera pas son statut export.)

6
PSkocik

Si vous voulez obtenir .profile chargé tout ce dont vous avez besoin est de démarrer une coquille de connexion:

$ bash -l

Cela devrait suffire à une session de course. Vous pouvez comparer le chemin avant et après qu'un identifiant Bash a été démarré pour confirmer la différence.

Pour une solution plus permanente, vous avez besoin d'une coque de connexion à démarrer à un moment donné avant la démarrage de votre terminal (console). Le login en tant qu'utilisateur spécifique se produit sur certains DM (gestionnaire d'affichage) (GNOME, KDE, XFCE, LXDE, etc.). Il devrait être le travail de l'un d'entre eux de modifier le chemin de la variable d'environnement pour répondre à vos besoins.

Par exemple, pour XFCE, la solution consiste à changer 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"

Pour Gnome, il semble que le fichier à changer est ~/.pam_environment.

Et pour KDE, Suivez ce guide , pour créer le fichier, vous pouvez utiliser ce code:

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

Ce lien a également des informations utiles.

0
user106035