Если есть «Проблемы Первого Мира» для сценариев, это было бы так.
У меня есть следующий код в скрипте, который я обновляю:
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
Сценарий отправляет электронную почту без проблем, но команда mailx вложена в оператор if, поэтому у меня остается два варианта:
- Поставьте
EOI
новую строку и разбейте шаблоны отступов или - Держите с отступом, но используйте что-то вроде выражения echo, чтобы mailx высосал мою электронную почту.
Я открыт для альтернатив heredoc, но если есть способ обойти это, это мой предпочтительный синтаксис.
источник
$dateLastChanged
), если я сделаю в вашем примере вещь с кавычками +, но если я беру дефис и кавычки и помещаю EOI в Новая линия начинает расширяться снова.cat << EOF | sed 's/^ *//'
и так далее.cat <<- EOF | awk 'NR==1 && match($0, /^ +/){n=RLENGTH} {print substr($0, n+1)}'
. Это удаляет количество предшествующих пробелов в первой строке из каждой строки в документе здесь (благодаря anubhava ).Если вам не требуется подстановка команд и расширение параметров внутри вашего документа here, вы можете избежать использования табуляции, добавив начальные пробелы в разделитель:
Однако я не мог найти способ использовать этот трюк и сохранить расширение параметров.
источник
shell-check
найдет любые отступы, которые не соответствуют пробелам в строке в кавычках. Использовать двойные кавычки для расширения параметров?Попробуй это:
источник
Хмм ... Похоже, вы могли бы лучше использовать
--format
аргумент здесь, чтобы использовать--printf
вместо этого и просто передать партии через канал. Кроме того, вашаif...fi
составная команда - она может перенаправить все наследуемые команды, поэтому, возможно, вам вообще не понадобится вкладывать heredoc.источник
sed
/awk
части. Часть моего пересмотра сегодня состояла в том, чтобы вынуть это, так как это не было уместно к вопросу В любом случае это шесть из полдюжины других.Другой метод был бы здесь:
источник