web-dev-qa-db-fra.com

Chemin de correction dans le fichier ~ / .profile

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.

  • Dois-je l'enlever ??
  • N'est-ce pas une erreur de syntaxe?
10
Smile

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.

12
Zanna

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 binde 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/.

4
Videonauth

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 PATHname__.

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 iest inutile. Il sera ajouté à la nouvelle valeur de $PATH et causera un désordre, comme l'explique @Zanna dans son réponse .

4
pa4080