GNU/Linux >> Tutoriales Linux >  >> Linux

comando de ruta real no encontrado

Hay al menos dos programas llamados realpath :

  • Un programa antiguo de cuando GNU coreutils no incluía readlink -f . Ahora está en desuso a favor de readlink -f , muchas distribuciones han dejado de incluirlo.
  • El realpath programa introducido en GNU coreutils 8.15. Esto es demasiado antiguo para estar en Debian squeeze o incluso sibilante; en el momento de escribir este artículo, Debian unstable tampoco lo incluye. Este programa está muy cerca de readlink -f .

Por alguna razón, tiene una función de shell que emula en parte el comportamiento de realpath . Esta emulación es parcial:si lo llama en un enlace simbólico, no sigue el enlace simbólico.

Dado que esta es una función de shell, presumiblemente cargada desde o a través de .bashrc , solo está disponible para el código que se ejecuta en su shell interactivo. Si desea que esté disponible para otros programas, suponiendo que está ejecutando Linux, cree un script que emule realpath :

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

(Esto no emula realpath opciones de línea de comando rara vez usadas).


Funciona solo en shell, porque el archivo de script tiene un alcance diferente y no tiene acceso a sus funciones locales y alias definidos en su rc archivos Y realpath el comando en realidad no existe en su sistema.

Así que instala realpath del paquete, defina su propia función (como parte de la secuencia de comandos, consulte algunos ejemplos) u obtenga el rc archivo en su secuencia de comandos donde está definido (por ejemplo, . ~/.bashrc ).

Estos son los pasos para instalar realpath si no está presente:

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

Ubuntu y Debian

En Debian o Ubuntu parece el realpath debe instalarse por defecto. Revisé el reciente Debian 8 (Jessie) y parece tener coreutils instalado por defecto.

Probado usando imágenes de VM nuevas:

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

Luego en VM:

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

En lugar de realpath , también puedes usar readlink -f file (o greadlink ) proporcionado por coreutils paquete también.


¿Realpath es un comando real o un script? Verificaría de dónde viene.

$ type -a realpath

No estoy familiarizado con esta herramienta, por lo que es probable que no forme parte de su distribución normal, tal vez esté instalada en una ubicación no estándar que no está presente en el $PATH de Bash. pero está dentro del $PATH de su entorno de inicio de sesión .

En cualquier caso, el type anterior comando le mostrará de dónde proviene el comando, momento en el que puede modificar el método que está llamando en su secuencia de comandos de la siguiente manera:

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

O modifique el $PATH de su secuencia de comandos para que también incluya esta ubicación no estándar.

Funciones en el shell

Gran parte de su entorno no se llama cuando invoca un script de shell. Si piensa en esto, tiene mucho sentido, ya que generalmente no desea que los scripts tengan todo el equipaje adicional que puede tener el entorno de un usuario.

Puede determinar qué archivo fuente proporciona esta función y obtenerla, o simplemente indicarle a Bash que incorpore su entorno de inicio de sesión.

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

Linux
  1. ifrename:comando no encontrado

  2. netstat:comando no encontrado

  3. kubectl:comando no encontrado

  4. tvservice:comando no encontrado

  5. lspci:comando no encontrado

aws-shell:comando no encontrado

id:comando no encontrado

w:comando no encontrado

df:comando no encontrado

du:comando no encontrado

nohup:comando no encontrado