#shell #unix #freebsd
#оболочка #unix #freebsd
Вопрос:
В моей основной функции сценария оболочки вызывается функция
send_report "{1}" "{2}"
Функция send_report имеет функцию send_mail, которая выглядит как
Send_Mail "${sub}" "${recip}" "`cat MSG_TEXT.txt`"
Теперь функция send_mail имеет 3 передаваемых аргумента, третьим аргументом является тело, которое здесь является содержимым MSG_TEXT.txt который содержит правильный контент, который я проверил.
if test "$3X" = "X"
then {
echo "$NAME- `date`" >> ${rootpath}Mail_MSG.txt
}
else {
cat $3 >> ${rootpath}Mail_MSG.txt
}
fi
mail -s "`cat ${rootpath}Mail_MSG.txt`" $MAILTO
Я получаю письмо, но в теле приходит значение
"$NAME- `date`"
что означает, что текст аргумента $ 3 не прочитан и удовлетворяет первому условию If . Итак, я хотел знать, неправильно ли я передаю аргументы командной строки при вызовах этих функций??
примечание — Запуск FreeBSD
Комментарии:
1. Несколько вещей…
cat $3
вероятно, ошибка, ожидающая возникновения, когда$3
содержит что-либо, кроме имени файла, которое доступно."{1}"
и"{2}"
являются буквальными строками, содержащими именно эти символы, поэтому, если это действительно то, на чтоsend_report
похож ваш вызов, это, вероятно, неправильно. Вместоif test "$3X" = "X"
этого попробуйтеif [ -z "$3" ]
проверить наличие пустой строки.2. @twalberg хорошо, поэтому я уберу двойные кавычки
{1}
и{2}
вsend_report
… Я также буду использовать-z
флаг на$3
… но что меня здесь смущаетMSG_TEXT.txt
, так это то, что в нем есть содержимое, поэтому, когда я использую его изSend_Mail
функции, почему он отображает имя и дату в теле письма, а не содержимое MSG_TEXT.txt …. не выполняется ли условие If?3. Я не думаю, что здесь достаточно, чтобы понять, что происходит. Попробуйте поместить
set -x
что-нибудь в начале вашего сценария, тогда вы сможете отслеживать каждую команду по мере ее выполнения и проверять, все ли работает так, как вы ожидаете.4. хорошо, сделаю это и дам вам знать, спасибо
5. Во FreeBSD рекомендуется использовать
/bin/sh
для сценариев оболочки, поскольку он является частью базовой системы FreeBSD. Оболочка Korn (ksh
) — это порт, который может быть недоступен. Примеры сценариев оболочки см., например/etc/rc.subr
.