GNU/Linux >> Tutoriels Linux >  >> Linux

commande realpath introuvable

Il existe au moins deux programmes appelés realpath :

  • Un ancien programme de l'époque où GNU coreutils n'incluait pas readlink -f . Il est désormais obsolète au profit de readlink -f , tant de distributions ont cessé de le proposer.
  • Le realpath programme introduit dans GNU coreutils 8.15. C'est trop vieux pour être dans Debian squeeze ou même wheezy; au moment de la rédaction, Debian unstable ne le fournit pas non plus. Ce programme est très proche de readlink -f .

Pour une raison quelconque, vous avez une fonction shell qui émule en partie le comportement de realpath . Cette émulation est partielle :si vous l'appelez sur un lien symbolique, elle ne suit pas le lien symbolique.

Puisqu'il s'agit d'une fonction shell, vraisemblablement chargée depuis ou via .bashrc , il n'est disponible que pour le code exécuté dans votre shell interactif. Si vous voulez qu'il soit disponible pour d'autres programmes, en supposant que vous utilisez Linux, créez un script qui émule realpath :

#!/bin/sh
readlink -f -- "[email protected]"

(Cela n'émule pas realpath les options de ligne de commande rarement utilisées.)


Cela ne fonctionne que dans le shell, car le fichier de script a une portée différente et n'a pas accès à vos fonctions locales et alias définis dans votre rc des dossiers. Et realpath commande n'existe pas réellement dans votre système.

Donc soit installer realpath à partir du package, définissez votre propre fonction (dans le cadre du script, vérifiez quelques exemples) ou sourcez le rc fichier dans votre script où il est défini (par exemple . ~/.bashrc ).

Voici les étapes pour installer realpath s'il n'est pas présent :

  • Ubuntu :sudo apt-get install coreutils
  • OS X :brew install coreutils

Ubuntu et Debian

Sur Debian ou Ubuntu, il semble que le realpath doit être installé par défaut. J'ai vérifié dans la récente Debian 8 (Jessie) et il semble avoir coreutils installé par défaut.

Testé avec de nouvelles images de VM :

$ vagrant init debian/jessie64 && vagrant up --provider virtualbox && vagrant ssh
$ vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh

Puis dans VM :

$ type -a realpath
realpath is /usr/bin/realpath

Au lieu de realpath , vous pouvez également utiliser readlink -f file (ou greadlink ) fourni par coreutils paquet aussi.


Realpath est-il une commande réelle ou un script ? Je vérifierais d'où ça vient.

$ type -a realpath

Je ne connais pas cet outil, et donc il ne fait probablement pas partie de votre distribution normale, peut-être est-il installé dans un emplacement non standard qui n'est pas présent sur le $PATH de Bash mais se trouve dans les $PATH de votre environnement de connexion .

En tout état de cause, les type ci-dessus command vous montrera d'où vient la commande, à quel point vous pouvez modifier la méthode que vous l'appelez dans votre script comme suit :

echo $(/path/to/realpath test.sh)

Ou modifiez le $PATH de votre script afin qu'il inclue également cet emplacement non standard.

Fonctions dans le shell

Une grande partie de votre environnement n'est pas appelée lorsque vous appelez un script shell. Si vous réfléchissez à cela, cela a beaucoup de sens, car vous ne voulez généralement pas que les scripts aient tout le bagage supplémentaire que l'environnement d'un utilisateur peut avoir.

Vous pouvez soit déterminer quel fichier source fournit cette fonction et soit le sourcer, soit simplement demander à Bash d'intégrer votre environnement de connexion.

#!/bin/bash -l
echo $(realpath "$1")

Linux
  1. gestionnaire d'abonnement :commande introuvable

  2. dnf :commande introuvable

  3. bc :commande introuvable

  4. dpkg :commande introuvable

  5. id :commande introuvable

nc :commande introuvable

aws-shell :commande introuvable

tvservice :commande introuvable

lspci :commande introuvable

ln :commande introuvable

nohup :commande introuvable