Mengapa yang berikut bash
memeriksa jika direktori gagal?
if [ ! -d "~/Desktop" ]; then
echo "DOES NOT EXIST"
exit 1;
fi
~/Desktop
memang ada. Omong-omong, ini ada di Mac.
Masalahnya dengan jenis skrip ini
read -p "Provide the destination directory: " DESTINATION
if [ ! -d $DESTINATION ]; then
echo "\t'$DESTINATION' does not exist." >&2;
exit 1;
fi
cd "~/Desktop"
Anda juga mendapatkan kesalahan. Itu harus dikutip atau disimpan sebagai variabel (tanpa tanda kutip). Misalnya,a=~/Desktop; cd $a;
berfungsi tetapi tidaka="~/Desktop"; cd Desktop;
Lihat serverfault.com/questions/417252/…Jawaban:
Justin mengklarifikasi pertanyaannya dalam komentar pertamanya tentang jawaban kuanta. Dia membaca dalam satu baris teks menggunakan
read
(atau dengan cara dinamis lainnya) dan ingin memperluas tilde.Pertanyaannya menjadi "Bagaimana Anda melakukan ekspansi tilde pada konten variabel?"
Pendekatan umum adalah menggunakan
eval
, tetapi ia datang dengan beberapa peringatan penting, yaitu spasi dan redirection output (>
) dalam variabel. Sepertinya ini bekerja untuk saya:Cobalah dengan masing-masing input berikut:
Penjelasan
${mypath//>}
strip keluar>
karakter yang bisa mengkritik file selamaeval
.eval echo ...
yang dilakukan ekspansi tilde yang sebenarnyaeval
adalah untuk mendukung nama file dengan spasi.Sebagai suplemen untuk ini, Anda dapat meningkatkan UX dengan menambahkan
-e
opsi untuk membaca:Sekarang ketika pengguna mengetikkan tilde dan tab hit, itu akan berkembang. Pendekatan ini tidak menggantikan pendekatan eval di atas, karena ekspansi hanya terjadi jika pengguna menekan tab. Jika dia hanya mengetikkan ~ / foo dan klik masuk, itu akan tetap sebagai tilde.
Lihat juga:
sumber
Hapus tanda kutip ganda di sekitar direktori untuk melihat apakah itu bekerja:
Alasannya adalah ekspansi tilde hanya berfungsi ketika tidak dikutip.
info "(bash) Tilde Expansion"
sumber
DESTINATION
adalah~/Desktop
.Ini tidak hanya berfungsi pada Mac tetapi pada platform apa pun yang menjalankan bash on.
Ketika Anda mengutip "~ / Desktop" Anda memberitahu bash untuk mencari Desktop di dalam folder ~. Kutipan menghilangkan tujuan khusus ~
Lihat - http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion
Hapus tanda kutip ganda dan itu harus bekerja.
sumber
Lari
gunakan
$HOME
, dan pastikan pengguna benar-benar menggunakan skrip. jika root menggunakan~
itu akan mencari/root
, bukan/home/$USER
.sumber
seharusnya $ HOME bukan ~
~ adalah hal KEYBOARD
sumber