Penyelesaian otomatis Bash menambahkan a / di akhir nama direktori. Bagaimana saya bisa menghapus ini dari parameter posisi?
#!/bin/sh
target=$1
function backup(){
date=`date "+%y%m%d_%H%M%S"`
PWD=`pwd`
path=$PWD/$target
tar czf /tmp/$date$target.tar.gz $path
}
backup
case $x in *[!/]*/) x=${x%"${x##*[!/]}"};; esac
target=${DIR%/}
Menggunakan
target=${1%/}
Lihat ini sebagai pengganti parameter dari panduan skrip bash ini untuk informasi lebih lanjut.
sumber
Saya pikir solusi yang lebih baik untuk jalur kanonisasi adalah
realpath $path
atau dengan-m
opsi jika tidak ada. Solusi ini secara otomatis menghilangkan garis miring yang tidak perlu dan menambahkan pwdsumber
readlink -f
sedikit lebih portabel daripadarealpath
. Untuk opsi tambahan / alternatif: linux.die.net/man/1/readlinktarget=$(realpath -L --relative-base . $1)
Hati-hati, bash3 menambahkan perl-mirip regex ke bash. Panduan yang disebutkan mencakup ini juga sebagai panduan resmi di GNU , tetapi tidak semua referensi melakukannya.
Apa yang saya lakukan?
Pengganti
2.19/*
menjadi2.19
.Larutan
sumber