Ingin memperbaiki pertanyaan ini? Perbarui pertanyaan agar sesuai dengan topik untuk Unix &Linux Stack Exchange.
Ditutup 5 tahun yang lalu.
Perbaiki pertanyaan ini
Saya sedang menulis skrip bash berbasis menu, salah satu opsi menu adalah mengirim email dengan lampiran file teks. Saya mengalami masalah dengan memeriksa apakah file saya adalah file teks. Ini yang saya punya:
fileExists=10
until [ $fileExists -eq 9 ]
do
echo "Please enter the name of the file you want to attach: "
read attachment
isFile=$(file $attachment | cut -d -f2)
if [[ $isFile = "ASCII" ]]
then
fileExists=0
else
echo "$attachment is not a text file, please use a different file"
fi
done
Saya terus mendapatkan potongan kesalahan:pembatas harus berupa satu karakter.
Jawaban yang Diterima:
Masalah terjadi di cut -d -f2
. Ubah ke cut -d -f2
.
Untuk cut
, argumennya terlihat seperti ini:
# bash: args(){ for i; do printf '%q \n' "$i"; done; }
# args cut -d -f2
cut
-d -f2
Dan inilah masalahnya. lolos dari spasi ke literal spasi alih-alih pembatas antara argumen di shell Anda, dan Anda tidak menambahkan spasi ekstra sehingga seluruh
-d -f2
bagian muncul sebagai satu argumen. Anda harus menambahkan satu ruang ekstra jadi -d
dan -f2
muncul sebagai dua argumen.
Untuk menghindari kebingungan, banyak orang menggunakan kutipan seperti -d' '
sebagai gantinya.
P.S.:Daripada menggunakan file dan membuat semuanya ASCII, saya lebih suka menggunakan
if file "$attachment2" | grep -q text$; then
# is text
else
# file doesn't think it's text
fi