GNU/Linux >> Belajar Linux >  >> Linux

perintah realpath tidak ditemukan

Setidaknya ada dua program bernama realpath :

  • Sebuah program lama dari belakang ketika GNU coreutils tidak menyertakan readlink -f . Sekarang tidak digunakan lagi karena readlink -f , begitu banyak distribusi yang berhenti membawanya.
  • realpath program diperkenalkan di GNU coreutils 8.15. Ini terlalu tua untuk diperas Debian atau bahkan serak; pada saat penulisan, Debian juga tidak stabil. Program ini sangat dekat dengan readlink -f .

Untuk beberapa alasan, Anda memiliki fungsi shell yang sebagian meniru perilaku realpath . Emulasi ini sebagian:jika Anda memanggilnya di tautan simbolik, itu tidak mengikuti tautan simbolik.

Karena ini adalah fungsi shell, mungkin dimuat dari atau melalui .bashrc , ini hanya tersedia untuk kode yang berjalan di shell interaktif Anda. Jika Anda ingin tersedia untuk program lain, dengan asumsi Anda menjalankan Linux, buat skrip yang mengemulasi realpath :

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

(Ini tidak meniru realpath opsi baris perintah yang jarang digunakan.)


Ini hanya berfungsi di shell, karena file skrip memiliki cakupan yang berbeda dan tidak memiliki akses ke fungsi dan alias lokal Anda yang ditentukan di rc Anda file. Dan realpath perintah sebenarnya tidak ada di sistem Anda.

Jadi instal realpath dari paket, tentukan fungsi Anda sendiri (sebagai bagian dari skrip, periksa beberapa contoh) atau sumber rc file di skrip Anda di tempat yang ditentukan (mis. . ~/.bashrc ).

Berikut langkah-langkah untuk menginstal realpath jika tidak ada:

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

Ubuntu &Debian

Di Debian atau Ubuntu sepertinya realpath harus diinstal secara default. Saya telah memeriksa Debian 8 (Jessie) baru-baru ini dan sepertinya memiliki coreutils diinstal secara default.

Diuji menggunakan gambar VM baru:

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

Kemudian di VM:

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

Alih-alih realpath , Anda juga dapat menggunakan readlink -f file (atau greadlink ) disediakan oleh coreutils paket juga.


Apakah realpath merupakan perintah aktual atau skrip? Saya akan memeriksa untuk melihat dari mana asalnya.

$ type -a realpath

Saya tidak terbiasa dengan alat ini, jadi sepertinya bukan bagian dari distribusi normal Anda, mungkin alat ini dipasang di lokasi non-standar yang tidak ada di $PATH Bash tetapi berada dalam $PATH lingkungan login Anda .

Bagaimanapun, type di atas perintah akan menunjukkan kepada Anda dari mana perintah itu berasal, pada titik mana Anda dapat mengubah metode yang Anda panggil dalam skrip Anda seperti ini:

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

Atau ubah $PATH skrip Anda sehingga juga menyertakan lokasi non-standar ini.

Fungsi di shell

Sebagian besar lingkungan Anda tidak dipanggil saat Anda menjalankan skrip shell. Jika Anda memikirkan hal ini, ini sangat masuk akal, karena biasanya Anda tidak ingin skrip memiliki semua bagasi tambahan yang mungkin dimiliki oleh lingkungan pengguna.

Anda dapat menentukan file sumber mana yang menyediakan fungsi ini dan sumbernya, atau cukup menginstruksikan Bash untuk memasukkan lingkungan login Anda.

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

Linux
  1. manajer langganan:perintah tidak ditemukan

  2. dnf:perintah tidak ditemukan

  3. bc:perintah tidak ditemukan

  1. dpkg:perintah tidak ditemukan

  2. id:perintah tidak ditemukan

  3. w:perintah tidak ditemukan

  1. df:perintah tidak ditemukan

  2. du:perintah tidak ditemukan

  3. nohup:perintah tidak ditemukan