GNU/Linux >> Znalost Linux >  >> Linux

příkaz realpath nenalezen

Existují alespoň dva programy s názvem realpath :

  • Starý program z doby, kdy GNU coreutils neobsahoval readlink -f . Nyní je zastaralá ve prospěch readlink -f , tolik distribucí jej přestalo nosit.
  • realpath program představený v GNU coreutils 8.15. Toto je příliš staré na to, aby bylo v Debianu squeeze nebo dokonce sípavé; v době psaní tohoto článku jej Debian unstable také nedodává. Tento program je velmi blízký readlink -f .

Z nějakého důvodu máte funkci shellu, která částečně emuluje chování realpath . Tato emulace je částečná:pokud ji zavoláte na symbolický odkaz, nenásleduje symbolický odkaz.

Protože se jedná o shellovou funkci, pravděpodobně načtenou z nebo přes .bashrc , je k dispozici pouze pro kód běžící ve vašem interaktivním shellu. Pokud chcete, aby byl dostupný pro jiné programy, za předpokladu, že používáte Linux, vytvořte skript, který emuluje realpath :

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

(Toto neemuluje realpath zřídka používané možnosti příkazového řádku.)


Funguje pouze v prostředí shell, protože soubor skriptu má jiný rozsah a nemá přístup k vašim lokálním funkcím a aliasům definovaným ve vašem rc soubory. A realpath příkaz ve vašem systému ve skutečnosti neexistuje.

Takže buď nainstalujte realpath z balíčku, definujte svou vlastní funkci (jako součást skriptu, zkontrolujte některé příklady) nebo vytvořte zdroj rc soubor ve vašem skriptu, kde je definován (např. . ~/.bashrc ).

Zde jsou kroky k instalaci realpath pokud není přítomen:

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

Ubuntu a Debian

Na Debianu nebo Ubuntu to vypadá jako realpath by měl být nainstalován ve výchozím nastavení. Zkontroloval jsem nedávný Debian 8 (Jessie) a zdá se, že má coreutils ve výchozím nastavení nainstalováno.

Testováno pomocí čerstvých obrazů virtuálních počítačů:

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

Poté ve VM:

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

Místo realpath , můžete také použít readlink -f file (nebo greadlink ) poskytuje coreutils balíček také.


Je realpath skutečný příkaz nebo skript? Zkontroloval bych, odkud pochází.

$ type -a realpath

Tento nástroj neznám, a proto pravděpodobně není součástí vaší normální distribuce, možná je nainstalován v nestandardním umístění, které není přítomno na $PATH Bash ale je v rámci vašeho přihlašovacího prostředí $PATH .

V každém případě výše uvedené type příkaz vám ukáže, odkud příkaz pochází, v tomto okamžiku můžete změnit metodu, kterou jej voláte ve skriptu takto:

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

Nebo upravte $PATH svého skriptu tak, aby zahrnoval i toto nestandardní umístění.

Funkce v shellu

Velká část vašeho prostředí se nezavolá, když vyvoláte skript shellu. Pokud se nad tím zamyslíte, dává to velký smysl, protože obecně nechcete, aby skripty měly všechna další zavazadla, která může mít uživatelské prostředí.

Můžete buď určit, který zdrojový soubor poskytuje tuto funkci, a buď jej získat jako zdroj, nebo jednoduše instruovat Bash, aby začlenil vaše přihlašovací prostředí.

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

Linux
  1. Subscription-manager:příkaz nenalezen

  2. dnf:příkaz nenalezen

  3. bc:příkaz nenalezen

  1. dpkg:příkaz nenalezen

  2. id:příkaz nenalezen

  3. w:příkaz nenalezen

  1. df:příkaz nenalezen

  2. du:příkaz nenalezen

  3. nohup:příkaz nenalezen