J'ai debian squeeze amd64. Mon shell actuel est bash. Si j'écris ce qui suit dans mon terminal, cela fonctionne:
$ uname -a
Linux core 2.6.32-5-amd64 #1 SMP Fri May 10 08:43:19 UTC 2013 x86_64 GNU/Linux
$ echo $SHELL
/bin/bash
$ echo $(realpath test.sh)
/home/ffortier/test.sh
Mon fichier test.sh ressemble à ceci:
#!/bin/bash
echo $(realpath "$1")
Si j'essaie d'exécuter ce qui suit, j'obtiens une erreur
$ ./test.sh test.sh
./test.sh: line 2: realpath: command not found
Comment puis-je utiliser la commande realpath dans un fichier bash?
Information additionnelle
$ type -a realpath
realpath is a function
realpath ()
{
f=$@;
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
#!/bin/bash -l
.realpath
. Mon système Fedora 19 inclut désormais cet outil. Notez également que l'OP utilisait un noyau Debian avec 2.6, de sorte que son système aurait également été manquantrealpath
compte tenu de son âge.command
m'ont toujours été utiles. C'est une façon plus portable de faire ce que je montrais sur des shells POSIX.Il existe au moins deux programmes appelés
realpath
:readlink -f
. Il est désormais obsolète en faveur dereadlink -f
, de nombreuses distributions ont donc cessé de le porter.realpath
programme introduit dans GNU coreutils 8.15. C'est trop vieux pour être dans Debian Squeeze ou même sifflant; au moment de la rédaction, Debian unstable ne l’envoie pas non plus . Ce programme est très prochereadlink -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.Comme il s'agit d'une fonction shell, probablement chargée depuis ou via
.bashrc
, elle n'est disponible que pour le code s'exécutant dans votre shell interactif. Si vous souhaitez qu'il soit disponible pour d'autres programmes, en supposant que vous exécutez Linux, créez un script qui émulerealpath
:(Cela n'émule pas les
realpath
options de ligne de commande rarement utilisées.)la source
realpath
programme est considéré comme obsolète par coreutils, ou qu'il n'est pas construit par défaut. Debian doit donc le supprimer.realpath
binaire, qui est proche mais pas exactement identique àreadlink -f
. Debian stable porte 8.13. Debian unstable a choisi de conserver le programme hérité .openssl
?Il fonctionne uniquement en shell, car le fichier de script a une portée différente et n'a pas accès à vos fonctions et alias locaux définis dans vos fichiers rc . Et la
realpath
commande n'existe pas réellement dans votre système.Donc, installez à
realpath
partir du package, définissez votre propre fonction (dans le cadre du script, consultez quelques exemples ) ou sourcez le fichier rc dans votre script là où il est défini (par exemple. ~/.bashrc
).Voici les étapes à installer
realpath
s'il n'est pas présent:sudo apt-get install coreutils
brew install coreutils
Ubuntu et Debian
Sur Debian ou Ubuntu, il semble que le
realpath
devrait être installé par défaut. J'ai vérifié la récente Debian 8 (Jessie) et elle semble s'êtrecoreutils
installée par défaut.Testé en utilisant de nouvelles images VM:
Puis en VM:
Au lieu de
realpath
, vous pouvez également utiliserreadlink -f file
(ougreadlink
) fourni parcoreutils
package.la source
la source