Jeśli istnieją skrypty „Pierwszego świata”, to właśnie one.
Mam następujący kod w skrypcie, który aktualizuję:
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
Skrypt wysyła wiadomość e-mail bez problemów, ale polecenie mailx jest zagnieżdżone w instrukcji if, więc wydaje mi się, że mam dwie możliwości:
- Umieść
EOI
nową linię i przerwij wzory wcięć lub - Trzymaj się wcięcia, ale użyj czegoś w rodzaju echa, aby mailx wyssał mój e-mail.
Jestem otwarty na alternatywy dla heredoc, ale jeśli istnieje sposób na obejście tego, to moja preferowana składnia.
źródło
$dateLastChanged
), jeśli wykonam funkcję hypen + quotes w twoim przykładzie, ale jeśli wezmę myślnik i cudzysłów i wstawię EOI na nowa linia ponownie zaczyna ją rozszerzać.cat << EOF | sed 's/^ *//'
i tak dalej.cat <<- EOF | awk 'NR==1 && match($0, /^ +/){n=RLENGTH} {print substr($0, n+1)}'
. To usuwa ilość poprzedzających spacji w pierwszym wierszu z każdego wiersza w dokumencie tutaj (dzięki anubhava ).Jeśli nie potrzebujesz zastępowania poleceń i rozszerzania parametrów w dokumencie tutaj, możesz uniknąć używania tabulatorów, dodając spacje wiodące do separatora:
Nie mogłem jednak znaleźć sposobu na użycie tej sztuczki i utrzymanie rozszerzania parametrów.
źródło
shell-check
znajdzie wszelkie wcięcia, które nie pasują do spacji w cytowanym ciągu. Użyć podwójnych cudzysłowów do rozszerzenia parametrów?Spróbuj tego:
źródło
Hmm ... Wygląda na to, że możesz lepiej skorzystać z
--format
argumentu tutaj, aby użyć--printf
zamiast tego i po prostu przesłać los przez fajkę. Ponadto twoje polecenieif...fi
jest złożone - może przyjąć przekierowanie, które odziedziczą wszystkie zawarte polecenia, więc może nie musisz wcale zagnieżdżać heredoc.źródło
sed
/awk
. Częścią mojej dzisiejszej rewizji było jej usunięcie, ponieważ nie było to istotne dla pytania. Tak czy inaczej to sześć z pół tuzina innych.Inną metodą byłyby ciągi znaków:
źródło