Jika ada "Masalah Dunia Pertama" untuk scripting, ini dia.
Saya memiliki kode berikut dalam skrip yang saya perbarui:
if [ $diffLines -eq 1 ]; then
dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g')
mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI
Last Change: $dateLastChanged
This is an automated warning of stale data for the UNC-G Blackboard Snapshot process.
EOI
else
echo "$diffLines have changed"
fi
Script mengirim email tanpa masalah, tetapi perintah mailx bersarang di dalam pernyataan if jadi saya tampaknya dibiarkan dengan dua pilihan:
- Letakkan
EOI
di baris baru dan pecahkan pola indentasi atau - Tetap dengan lekukan tetapi gunakan sesuatu seperti pernyataan gema untuk mendapatkan mailx untuk menyedot email saya.
Saya terbuka untuk alternatif selain heredoc, tetapi jika ada cara untuk menyiasatinya, ini adalah sintaks pilihan saya.
sumber
$dateLastChanged
) jika saya melakukan hal tanda kutip + kutipan dalam contoh Anda, tetapi jika saya mengambil tanda hubung dan mengutip dan meletakkan EOI pada baris baru itu mulai berkembang lagi.cat << EOF | sed 's/^ *//'
dan sebagainya.cat <<- EOF | awk 'NR==1 && match($0, /^ +/){n=RLENGTH} {print substr($0, n+1)}'
. Ini menghilangkan jumlah ruang sebelumnya di baris pertama dari setiap baris dalam dokumen di sini (terima kasih kepada anubhava ).Jika Anda tidak memerlukan substitusi perintah dan perluasan parameter di dalam dokumen-sini Anda, Anda dapat menghindari menggunakan tab dengan menambahkan spasi utama ke pembatas:
Saya tidak bisa menemukan cara untuk menggunakan trik ini dan menjaga ekspansi parameter.
sumber
shell-check
akan menemukan perubahan indentasi yang tidak cocok dengan spasi dalam string yang dikutip. Gunakan tanda kutip ganda untuk ekspansi parameter?Coba ini:
sumber
Hmm ... Sepertinya Anda bisa mengambil keuntungan lebih baik dari
--format
argumen di sini untuk digunakan--printf
sebagai gantinya dan hanya melewati banyak di atas pipa. Juga, Andaif...fi
adalah perintah majemuk - itu bisa mengambil redirect yang semua perintah yang terkandung akan mewarisi, jadi mungkin Anda tidak perlu membuat sarang heredoc sama sekali.sumber
sed
/awk
. Bagian dari revisi saya hari ini adalah untuk mengeluarkannya karena itu tidak sesuai dengan pertanyaan. Either way itu enam dari satu setengah lusin yang lain.Metode lain adalah herestrings:
sumber