GNU/Linux >> Linux Esercitazione >  >> Linux

comando realpath non trovato

Ci sono almeno due programmi chiamati realpath :

  • Un vecchio programma di quando GNU coreutils non includeva readlink -f . Ora è deprecato a favore di readlink -f , così tante distribuzioni hanno smesso di portarlo.
  • Il realpath programma introdotto in GNU coreutils 8.15. Questo è troppo vecchio per essere in Debian squeeze o addirittura ansimante; al momento in cui scrivo, nemmeno Debian unstable lo distribuisce. Questo programma è molto vicino a readlink -f .

Per qualche ragione, hai una funzione di shell che emula in parte il comportamento di realpath . Questa emulazione è parziale:se la chiami su un collegamento simbolico, non segue il collegamento simbolico.

Poiché si tratta di una funzione di shell, presumibilmente caricata da o tramite .bashrc , è disponibile solo per il codice in esecuzione nella shell interattiva. Se vuoi che sia disponibile per altri programmi, supponendo che tu stia eseguendo Linux, crea uno script che emuli realpath :

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

(Questo non emula realpath opzioni della riga di comando raramente utilizzate.)


Funziona solo in shell, perché il file di script ha un ambito diverso e non ha accesso alle tue funzioni locali e agli alias definiti nel tuo rc File. E realpath command in realtà non esiste nel tuo sistema.

Quindi installa realpath dal pacchetto, definisci la tua funzione (come parte dello script, controlla alcuni esempi) o procurati rc file nello script in cui è definito (ad es. . ~/.bashrc ).

Ecco i passaggi per installare realpath se non è presente:

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

Ubuntu e Debian

Su Debian o Ubuntu sembra il realpath dovrebbe essere installato per impostazione predefinita. Ho controllato la recente Debian 8 (Jessie) e sembra avere coreutils installato per impostazione predefinita.

Testato utilizzando nuove immagini VM:

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

Quindi in VM:

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

Invece di realpath , puoi anche utilizzare readlink -f file (o greadlink ) fornito da coreutils anche il pacchetto.


realpath è un vero comando o uno script? Verificherei per vedere da dove proviene.

$ type -a realpath

Non ho familiarità con questo strumento, quindi probabilmente non fa parte della tua normale distribuzione, forse è installato in una posizione non standard che non è presente su $PATH di Bash ma è all'interno del $PATH del tuo ambiente di accesso .

In ogni caso, il precedente type command ti mostrerà da dove proviene il comando, a quel punto puoi modificare il metodo che lo stai chiamando nel tuo script in questo modo:

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

Oppure modifica il $PATH del tuo script in modo che includa anche questa posizione non standard.

Funzioni nella shell

Gran parte del tuo ambiente non viene chiamato quando invochi uno script di shell. Se ci pensi, questo ha molto senso, dal momento che generalmente non vuoi che gli script abbiano tutto il bagaglio aggiuntivo che potrebbe avere l'ambiente di un utente.

Puoi determinare quale file di origine fornisce questa funzione e crearne la fonte o semplicemente istruire Bash a incorporare il tuo ambiente di accesso.

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

Linux
  1. ifrename:comando non trovato

  2. netstat:comando non trovato

  3. kubectl:comando non trovato

  4. tvservice:comando non trovato

  5. lspci:comando non trovato

aws-shell:comando non trovato

df:comando non trovato

du:comando non trovato

rm:comando non trovato

mv:comando non trovato

nohup:comando non trovato