Saya memiliki debian squeeze amd64. Shell saya sekarang adalah bash. Jika saya menulis yang berikut di terminal saya, itu berfungsi:
$ uname -a
Linux core 2.6.32-5-amd64 #1 SMP Fri May 10 08:43:19 UTC 2013 x86_64 GNU/Linux
$ echo $SHELL
/bin/bash
$ echo $(realpath test.sh)
/home/ffortier/test.sh
File test.sh saya terlihat seperti ini:
#!/bin/bash
echo $(realpath "$1")
Jika saya mencoba menjalankan yang berikut ini, saya mendapatkan kesalahan
$ ./test.sh test.sh
./test.sh: line 2: realpath: command not found
Bagaimana saya bisa menggunakan perintah realpath dalam file bash?
informasi tambahan
$ type -a realpath
realpath is a function
realpath ()
{
f=$@;
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
#!/bin/bash -l
,.realpath
. Sistem Fedora 19 saya sekarang termasuk alat ini. Juga perhatikan OP menggunakan kernel Debian w / 2.6, jadi sistemnya juga akan hilangrealpath
mengingat usianya.command
itu masih berguna bagi saya. Ini cara yang lebih portabel untuk melakukan apa yang saya tunjukkan di seluruh cangkang POSIX.Setidaknya ada dua program yang disebut
realpath
:readlink -f
. Sekarang sudah tidak digunakan lagireadlink -f
, sehingga banyak distribusi telah berhenti membawanya.realpath
Program diperkenalkan pada GNU coreutils 8.15. Ini terlalu tua untuk diperas Debian atau bahkan mengi; pada saat penulisan, Debian tidak stabil juga tidak mengirimkannya . Program ini sangat dekatreadlink -f
.Untuk beberapa alasan, Anda memiliki fungsi shell yang sebagian meniru perilaku
realpath
. Persaingan ini sebagian: jika Anda menyebutnya pada tautan simbolik, itu tidak mengikuti tautan simbolik.Karena ini adalah fungsi shell, mungkin dimuat dari atau melalui
.bashrc
, itu hanya tersedia untuk kode yang berjalan di shell interaktif Anda. Jika Anda ingin itu tersedia untuk program lain, dengan asumsi Anda menjalankan Linux, buat skrip yang menirurealpath
:(Ini tidak meniru
realpath
opsi baris perintah yang jarang digunakan.)sumber
realpath
program tersebut dianggap usang oleh coreutils, atau bahwa itu tidak dibangun secara default. Jadi Debian harus menghapusnya.realpath
biner, yang dekat tapi tidak persis sama denganreadlink -f
. Stabil Debian membawa 8.13. Debian tidak stabil memilih untuk mempertahankan program warisan .openssl
?Ini hanya berfungsi di shell, karena file skrip memiliki cakupan yang berbeda dan tidak memiliki akses ke fungsi lokal Anda atau alias yang ditentukan dalam file rc Anda . 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 file rc di skrip Anda di tempat yang ditentukan (misalnya. ~/.bashrc
).Berikut langkah-langkah untuk menginstal
realpath
jika tidak ada:sudo apt-get install coreutils
brew install coreutils
Ubuntu & Debian
Pada Debian atau Ubuntu tampaknya
realpath
harus diinstal secara default. Saya telah memeriksa di Debian 8 (Jessie) baru-baru ini dan tampaknya telahcoreutils
diinstal secara default.Diuji menggunakan gambar VM segar:
Kemudian di VM:
Alih-alih
realpath
, Anda juga dapat menggunakanreadlink -f file
(ataugreadlink
) yang disediakan olehcoreutils
paket juga.sumber
sumber