Setidaknya ada dua program bernama realpath
:
- Sebuah program lama dari belakang ketika GNU coreutils tidak menyertakan
readlink -f
. Sekarang tidak digunakan lagi karenareadlink -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 denganreadlink -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")