這似乎很簡單,但我找不到任何關於如何執行此操作的問題:我基本上使用KSH變量來構建我的電子郵件正文文本。在錯誤/異常情況下,我想使用'\ n'作爲分隔符來轉儲env/printenv/export。Korn Shell - env,printenv,export - 如何獲得CRLF作爲分隔符
if (($status != 0))
then
MESSAGE="${MESSAGE}\n"
MESSAGE="${MESSAGE}\n\tBatch Process\t: ${BATCHPROCESS}"
MESSAGE="${MESSAGE}\n\tEnvironment\t: ${ENVTEXT}"
MESSAGE="${MESSAGE}\n\tDate/Time\t: ${STARTDATETIME}"
MESSAGE="${MESSAGE}\n\nRuntime:"
MESSAGE="${MESSAGE}\n$(env)"
echo -e $MESSAGE >> ${MAILFILE1}
mail -s"FAILURE - ${SUBJECT} " $MAILLIST < ${MAILFILE1}
因此,根據對ENV/printenv /導出的文件,它已經在使用LF作爲分隔符,但是當我收到郵件,它只是一個文本的大塊:
Runtime:
Runtime:
我要的是一個單獨的行每個變量:
Runtime :
ACCESSDB=[Sybase-Database]
ACCESSSRV=[Sybase-Server]
...etc...
反正是有強制替代LF的「\ n」目前正在使用?
UPDATE:我使用SED -s 'S/$/\ r \ n/G' 和它的格式化ENV輸出,但現在整個電子郵件正文被作爲附件發送:
if (($status != 0))
then
MESSAGE="${MESSAGE}\n"
MESSAGE="${MESSAGE}\n\tBatch Process\t: ${BATCHPROCESS}"
MESSAGE="${MESSAGE}\n\tEnvironment\t: ${ENVTEXT}"
MESSAGE="${MESSAGE}\n\tDate/Time\t: ${STARTDATETIME}"
env | sort | sed 's/$/\r\n/g' > ${TEMPFILES}/env.txt
MESSAGE="${MESSAGE}\n\nRuntime:"
MESSAGE="${MESSAGE}\n$(cat ${TEMPFILES}/env.txt)"
echo -e "$MESSAGE" >> ${MAILFILE1}
mail -s"FAILURE - ${SUBJECT} " $MAILLIST < ${MAILFILE1}
任何想法?我認爲這是一些在最大郵件大小的郵件設置,但我是一個Java程序員比殼牌scripter更多...
CLOSE SOLUTION:原來\ r \ n導致附件問題[https://access.redhat.com/solutions/1136493] 。所以我用的sed -s 'S/$/\ N/G',這是非常接近我想要的東西,除了ENV是採用雙線路輸出:
if (($status != 0))
then
MESSAGE="${MESSAGE}\n"
MESSAGE="${MESSAGE}\n\tBatch Process\t: ${BATCHPROCESS}"
MESSAGE="${MESSAGE}\n\tEnvironment\t: ${ENVTEXT}"
MESSAGE="${MESSAGE}\n\tDate/Time\t: ${STARTDATETIME}"
MESSAGE="${MESSAGE}\n\nRuntime:"
MESSAGE="${MESSAGE}\n$(env | sort | sed 's/$/\n/g')"
echo -e "$MESSAGE" >> ${MAILFILE1}
mail -s"FAILURE - ${SUBJECT} " $MAILLIST < ${MAILFILE1}
生成輸出:
Runtime:
ACCESSDB=[Sybase-Database]
ACCESSSRV=[Sybase-server]
ARCHIVEDB=[Sybase-Database]
ASBIN=[Directory-Path]
最終的解決方案:實現markp的修復,然後就拿出我的sed -s東西,它正常工作:
if (($status != 0))
then
MESSAGE="${MESSAGE}\n"
MESSAGE="${MESSAGE}\n\tBatch Process\t: ${BATCHPROCESS}"
MESSAGE="${MESSAGE}\n\tEnvironment\t: ${ENVTEXT}"
MESSAGE="${MESSAGE}\n\tDate/Time\t: ${STARTDATETIME}"
MESSAGE="${MESSAGE}\n\nRuntime:"
MESSAGE="${MESSAGE}\n$(env | sort)"
echo -e "$MESSAGE" >> ${MAILFILE1}
mail -s"FAILURE - ${SUBJECT} " $MAILLIST < ${MAILFILE1}
TIA,adym
你好,是的,試過這個。沒有不同。-adym – lincolnadym
markp,事實證明你是正確的。我需要這樣做,以及拿出我的sed -s的東西。謝謝! adym – lincolnadym