web-dev-qa-db-fra.com

Fichier source du script shell non enregistré

J'ai enregistré un script Shell dans bin (créé par moi). Lorsque j'exécute le programme, pour éviter ./ d'exécuter le script, je dois le copier dans l'un des répertoires spécifiés par la variable PATH. Le répertoire bin créé ne figure pas dans la liste des chemins. Donc, pour ajouter à la liste PATH:

export PATH=~/bin:"$PATH"

Mais ce répertoire n'est pas enregistré dans la liste PATH. Lorsque j'ouvre une nouvelle fenêtre de terminal, je dois l'exporter à nouveau pour exécuter le script. Comment puis-je l'ajouter à la liste PATH de manière permanente? De plus, si j'essaie de déplacer le script dans le répertoire actuel de la liste PATH, il indique PERMISSION DENIED. Dois-je le déplacer en devenant un utilisateur root?

2
Rohan

Vous pouvez ajouter export PATH=~/bin:"$PATH" à votre fichier ~/.profile. Ajoutez-le en bas, sauvegardez puis reconnectez-vous à SSH.

Si vous souhaitez que ce changement concerne tout le système, vous pouvez également modifier le chemin dans /etc/environment.

3
Alex Vanino

Celui-ci a fonctionné pour moi.

Ouvrez votre .bashrc gedit ~/.bashrc

L'éditeur de texte est ouvert.

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

Collez ceci et éditez le .bashrc. Après avoir fermé l’éditeur de texte, source ~/.bashrc

Si vous obtenez une autorisation refusée, cela signifie que le script n'est pas au format exécutable. chmod 755 program_name Cela devrait faire le travail. Ouvrez le nouveau terminal et cela fonctionnera.

2
Rohan

Ajouter le chemin du répertoire personnel personnalisé à $ PATH

  1. Editez votre ~/.profile
  2. Ajoutez cette ligne après tous les vars liés à $ PATH:

    export PATH="$PATH:$HOME/your-home-dir-path"

  3. Enregistrer le fichier.

  4. Déconnexion/Redémarrage.

En ajoutant ceci à votre ~/.profile, activez cette modification en mode terminal et texte.

Juste au cas où votre chemin personnalisé est ~/bin ou ~/.local/bin !!!

Comme déjà dit dans le commentaire de la question, ces emplacements sont déjà inclus dans PATH dans Ubuntu!

Vous pouvez simplement:

  1. Créez le répertoire (par exemple, ~/bin).
  2. Copiez votre script pour cela.
  3. Changez ses permitions pour être exécutable avec la commande:

    chmod +x ~/bin/script.sh

  4. Déconnexion/connexion. Alternativement, vous pouvez exécuter source ~/.profile

1

Comme déjà mentionné, votre ~/.profile devrait déjà contenir quelque chose comme ce qui suit:

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

Cependant, on dirait que vous lancez un shell bash interactif (c'est-à-dire que vous ne vous connectez pas via ssh mais que vous lancez un terminal à partir d'un environnement de bureau). qui ne lit pas ~/.profile et à la place ~/.bashrc est lu comme expliqué ici .

Vous pouvez modifier ~/.bashrc pour ajouter le chemin ou lire ~/.profile pour les shells non connectés comme expliqué ici mais comme Jacob l’a mentionné, si vous vous déconnectez/vous connectez, ceci n’est pas obligatoire.

Pour comprendre la différence entre un shell connecté et non connecté, voir ceci réponse .

1
Martin K

Quand tu cours

export PATH=~/bin:"$PATH"

vous définissez la variable d'environnement PATH et l'exportez vers les terminaux parents en cours d'exécution. C'est comme si on disait "la nouvelle variable PATH est la suivante, répandre la Parole". Cela fonctionne, mais une fois que vous redémarrez votre ordinateur, le PATH reviendra à celui configuré. Pour rendre la modification permanente, vous devrez éditer le fichier .profile de votre dossier personnel. Il a généralement ceci:

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

qui inclurait automatiquement le dossier $ HOME/bin s’il existe. Sinon, vous pouvez simplement ajouter les commandes ci-dessus ou:

    export PATH="$PATH:$HOME/bin"

dans le fichier et ce dossier sera inclus dans le PATH à chaque session de votre utilisateur.

Vous devez disposer d'autorisations root pour écrire dans le répertoire/usr/bin, mais cela n'est pas nécessaire si vous modifiez le fichier .profile.

0
IanC