Correction du paramètre de chemin dans le fichier ~ / .profile


11

Il y a une ligne dans ~/.profilelaquelle est

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

Je ne suis pas sûr de la dernière i.

  • Dois-je le retirer ??
  • N'est-ce pas une erreur de syntaxe ??


4
@dessert Je ne suis pas sûr que ce soit un doublon. Je suis d'accord que les deux concernent la $PATHvariable d'environnement, mais ce ne sont pas des doublons. Tout au plus, ils sont liés. Cette question est un problème dans ~/.profilelequel il se trouve que c'est juste un caractère supplémentaire dans la ligne où l' $PATHenvironnement est assigné.
Dan

@Dan La réponse la plus élevée (!) Votée dans la question en double explique à quoi devrait ressembler une PATH=ligne ~/.profile- ce qui est la vraie question ici.
dessert

1
@dessert ce que l'OP a ici est parfaitement valide, ce n'est pas un problème de format invalide. Cela fonctionne, cela ne fait rien d'utile.
terdon

2
Oui, j'utilise l'éditeur vi. Peut-être que j'ai accidentellement mis le «i» dans le fichier comme le dit le dessert. Mais alors j'ai dû: wq pour le rendre efficace. Je pense que je ne l'ai pas fait, mais compte tenu de mon niveau, j'aurais peut-être fait quelque chose de stupide.
Souriez

Réponses:


13

Non, ce n'est pas une erreur de syntaxe; c'est juste une lettre qui est ajoutée après l'expansion 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 d'ajouter des répertoires locaux, il a effectivement supprimé l'existant /snap/binde mon PATH et ajouté l'inexistant /snap/bini.

Vous pouvez supprimer le ipour réparer votre CHEMIN.

Pour voir le changement, vous devrez vous déconnecter et source ~/.profilevous reconnecter ou exécuter n'importe quel shell que vous utilisez (ou lancer le shell bash -l), car il .profileest lu uniquement par les shells de connexion .

Si vous n'avez pas apporté cette modification à vous- .profilemême, vous souhaiterez peut-être restaurer le fichier par défaut en exécutant

mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile

Cela 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 /etc/skel.


5

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 actuel, la variable $HOMEsera 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 $PATHvariable sera développée et ajoutée. Le côlon :joue un rôle de délimiteur dans l' PATHexpression.

L'objectif ultime est 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 voulons que le shell recherche d'abord les exécutables dans ces emplacements et ensuite seulement à l'échelle du système.

Le personnage iest inutile. Il sera ajouté à la nouvelle valeur de $PATHet gâchera, comme l'explique @Zanna dans sa réponse .


5

Oui, c'est une erreur de syntaxe, le réel .profiledevrait ressembler à ceci sauf si vous avez changé les choses (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 binprésence du répertoire des utilisateurs n'était pas incluse dans le .profile. La meilleure façon de vérifier à quoi cela devrait ressembler est de jeter un coup d'œil /etc/skel/.profile.

Donc, pour ajouter comme vous l'avez demandé dans votre commentaire, placez simplement ceci à 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 jamais vous gâchez complètement votre profil, il y en a une copie où vous pouvez en obtenir un nouveau /etc/skel/.


1
J'ai une ligne supplémentaire "export PATH = $ PATH: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin" car je l'ai installée. Est-ce que ça va ??
Sourire

3
Cette ligne est très bien je l'ai incluse dans mon exemple pour montrer où la placer.
Videonauth

1
Veuillez noter que /etc/skel/.profiledans 16.04 semble différent, sans test s'il "$HOME/bin"existe. Même si c'était une meilleure variante (OMI), elle semble avoir été modifiée en 17.10 - pour une raison ou par erreur.
Gunnar Hjalmarsson

@GunnarHjalmarsson le notera dans mon article, et oui, c'est le skel / .profile du 17.10 sur lequel je cours.
Videonauth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.