Remplacer le chemin vers le binaire pour un utilisateur particulier

8

Ma question semble banale mais je n'ai pas réussi à trouver quoi que ce soit d'utile sur Internet. J'ai un binaire dans

/urs/bin/binary

mais il est obsolète et une version plus récente est disponible sur certains supports par exemple

/mount/new_version/binary

Il y a un script bash qui invoque ce binaire sous une forme comme

binary -doSomething

J'ai besoin de ce script pour invoquer une nouvelle version de binaire au lieu de l'ancienne mais je ne suis pas autorisé à modifier ce script. Est-ce un moyen de remplacer le chemin d'accès, mais uniquement pour mon utilisateur? Toute aide serait appréciée.

Viktor Stolbin
la source
Si vous n'êtes pas autorisé à le faire, parlez-en à votre administrateur.
Sven

Réponses:

11

Si le binaire est dans /usr/bin/binaryet que le script appelle le binaire sans spécifier le chemin complet, mais se fie à la place sur /usr/binêtre dans, PATHvous pouvez simplement ajouter l'emplacement du nouveau binaire au début de l'utilisateur PATH. Mettez quelque chose comme ça dans leur ~/.bashrc:

PATH=/mount/new_version:$PATH

Pour des raisons de sécurité, les scripts spécifient souvent le chemin complet vers les binaires pour éviter ce genre de chose.

En pause jusqu'à nouvel ordre.
la source
3

Si vous avez accès au binaire, vous pouvez le sauvegarder et créer un lien symbolique.

mv /urs/bin/binary /urs/bin/binary.bkp
ln -s /mount/new_version/binary /urs/bin/binary

[ÉDITER]

Désolé, je n'ai pas vu que la modification doit être effectuée pour un seul utilisateur.

Vous pouvez créer une fonction à appeler au lieu du binaire.

Selon la façon dont vous exécutez le binaire (chemin complet ou simplement nom), vous devez créer une fonction appropriée , comme:

# Full path
function /urs/bin/binary () { command /mount/new_version/binary "$@"; }
export -f /urs/bin/binary
# Name
function binary () { command /mount/new_version/binary "$@"; }
export -f binary

Si le binaire n'accepte pas / n'a pas besoin d'arguments, supprimez le "$ @" .

Pour automatiser la création de fonction, placez les lignes de fonction dans le fichier .profile du répertoire personnel de l'utilisateur.

Douglas P.
la source
Cela affectera tous les utilisateurs. Ce n'est pas acceptable.
Viktor Stolbin
Désolé, j'ai corrigé la réponse car la modification ne doit concerner qu'un seul utilisateur.
Douglas P.
3

alias commandname=/mount/new_version/binary

dans le .bashrc au-dessus de l'instruction / exportation du chemin ou dans le profil accomplira assez facilement.

art3mis
la source