1

mailxでssh経由でメールを送信するのに苦労しています。これがユースケースです。小さな展開スクリプトを書いていて、最後にカスタム メールを送信したいと考えています。私たちの開発マシンは電子メールを直接送信できないため、統合マシンを ssh 経由で使用して仕事をすることを考えました。スクリプトでは、受信者、件名、および電子メールの内容がすべて変数に格納されます。変更ログとしてプロジェクトにコミットされているため、内容は Markdown で記述されています。

これが私が試したコマンドです:

ssh user@host "echo -e ${CHANGELOG_CONTENT} | mailx -s \"${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}\" ${CHANGELOG_RECIPIENTS}"

この前にいくつかのバリエーションを試しましたが、うまくいきませんでした。このバージョンでは、次のエラーが表示されます。

bash: -c: line 0: syntax error near unexpected token `('

変数を内容に置き換えたコマンドの例を次に示します (手作り) :

ssh user@host "echo -e Version 1.2\n\n- branch-1 : [gitlab link](http://gitlab.example.com/project-alpha/commits/branch-1)\n\n | mailx -s "Project Alpha - 1.2 - 2015-26-05 13:10" me@example.com you@example.com"

エラーが不適切なエスケープ/引用に起因していると確信していますが、SSHでコマンドをネストしているため、適切な組み合わせが見つかりません.

どんな助けでも感謝します。

4

1 に答える 1

0

/bin/shヒアドキュメントを使用して、スクリプト全体をその場でリモートの stdin にフィードできます。

ssh user@host /bin/sh <<EOF
mailx -s "${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}" ${CHANGELOG_RECIPIENTS} <<'END_OF_MAIL_BODY'
${CHANGELOG_CONTENT}
END_OF_MAIL_BODY
EOF

$CHANGELOG_CONTENTで始まる行が含まれていると失敗することに注意してくださいEND_OF_MAIL_BODY

ところで、私は を使用することを好みますsendmail。メールの送信をより適切に制御できます。

ssh user@host /bin/sh <<EOF
sendmail -t <<'END_OF_MAIL_HEADER_AND_BODY'
From: ${CHANGELOG_SENDER}
Subject: ${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}
Bcc: ${CHANGELOG_RECIPIENTS}

${CHANGELOG_CONTENT}
END_OF_MAIL_HEADER_AND_BODY
EOF
于 2015-05-26T12:48:10.947 に答える