Il y a une ligne dans ~/.profile
qui est
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
Je ne suis pas sûr du dernier i
.
Non, ce n'est pas une erreur de syntaxe. c'est juste une lettre qui est ajoutée après le développement de $PATH
, car le shell supprime les guillemets ...
$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini
Ainsi, en plus des répertoires locaux préfixés, il a effectivement supprimé le /snap/bin
existant de mon PATH et ajouté le /snap/bini
non existant.
Vous pouvez supprimer le i
pour réparer votre PATH.
Pour voir la modification, vous devrez vous déconnecter et vous reconnecter ou exécuter source ~/.profile
dans tout shell utilisé (ou le lancer avec bash -l
), car .profile
est lu par shells de connexion uniquement.
Si vous n'avez pas modifié vous-même votre .profile
, vous souhaiterez peut-être restaurer le fichier par défaut en exécutant
mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile
Ceci renomme l'ancien .profile
.profile.old
(vous pouvez également supprimer le fichier si vous le souhaitez) et le remplace par la version par défaut de votre système à partir de /etc/skel
.
Oui, c'est une erreur de syntaxe. Le .profile
devrait ressembler à ceci, sauf si vous avez changé la situation (c'est la version 17.10, voir les notes ci-dessous):
# ~/.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.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Cela peut sembler différent dans les anciennes versions d'Ubuntu où la vérification de la présence du répertoire bin
de l'utilisateur n'était pas incluse dans le .profile
. La meilleure façon de vérifier à quoi cela devrait ressembler est de regarder /etc/skel/.profile
.
Donc, pour ajouter ce que vous avez demandé dans votre commentaire, placez-le simplement à la fin de votre fichier de profil:
# Manual addition for Swift development snapshot
export PATH="$PATH:/home/jeremy/Swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"
Si vous modifiez complètement votre profil, vous en trouverez une copie dans /etc/skel/
.
Je pense que la signification de l'expression suivante n'est pas claire:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
La première partie PATH=
signifie que nous attribuons une nouvelle valeur à la variable (environnement) $PATH
.
La deuxième partie est la nouvelle valeur de cette variable. Dans le cas présent, la variable $HOME
sera développée avec sa valeur actuelle et à cette valeur sera ajoutée la chaîne /bin:
. Il en va de même pour la partie suivante de la chaîne $HOME/.local/bin:
. Enfin, la valeur actuelle (précédente) de la variable $PATH
sera développée et ajoutée. Les deux points :
jouent un rôle de délimiteur dans l'expression PATH
name__.
Le but est finalement d'écrire: PATH=<some additional paths>+<the the current value of $PATH>
. Nous plaçons ces chemins supplémentaires devant la chaîne, car nous souhaitons que le shell recherche d'abord les exécutables dans ces emplacements, puis uniquement à l'échelle du système.
Le caractère i
est inutile. Il sera ajouté à la nouvelle valeur de $PATH
et causera un désordre, comme l'explique @Zanna dans son réponse .