그래서 나는 아침에 procesed 한 무리를 위해 경쟁 시간을 찾아야한다. 주로 꼬리 -1 파일을 가지고 시간을 확인해야합니다. 나는 그것을 작은 보고서에 자동화했다. 내가 그룹에 보고서를 보내려고 할 때 bash는 전자 메일 프로세스에서 printf 서식을 잃어 버린다.
PROCESS DATE
============================================
topher_time 06:55.192Z
big_sync_morning_time 07:15:45
etime_prod 07:46.952Z
database_time 08:08:49
trigger 08:38:13,076
trans_database_time 08:55:33
문제
는 - 그것은 모든 이 엉망이 나온다. 나는 모두가 이메일에서 편집자/리더로 html을 사용했기 때문에 그럴 것이라고 생각했습니다. 그래서 나는 몇몇 이메일 태그를 달았습니다.하지만 여전히 엉망입니다. 보고서가 잘 포맷되어 있으므로 보고서를 잘라내어 이메일에 붙여 넣을 수 있습니다. 그러나 프로그램에서 보고서를 이메일로 보내려고하면 서식이 엉망입니다.#!/bin/bash
divider=======================================================
totalwidth=44
header="\n %-18s %-16s \n"
format=" %-18s %-16s \n"
topher=$(tail -1 /come/and/play/topher.log| ~/walt/convert_gm_est)
big_sync_morning=$(tail -1 /come/and/play/big_sync-morning.log|~/walt/convert_gm_est)
sub_shell=$(tail -1 /come/and/play/trainer.log|~/walt/convert_gm_est)
database=$(tail -1 /come/and/play/with/us/danny/database.log)
trans_c4=$(tail -1 /come/and/play/with/us/danny/regular.sys.log)
trans_database=$(tail -1 /come/and/play/with/us/danny/database.stdout|~/walt/convert_gm_est)
topher_time=$(printf "%s " $topher | awk '{print $1}')
big_sync_morning_time=$(printf "%s " ${big_sync_morning} | awk '{print $1}')
etime_prod=$(printf "%s " ${sub_shell}| awk '{print $1}')
database_time=$(printf "%s " $database | awk '{print $5}')
triggertime=$(printf "%s " $trans_c4 | awk '{print $1}')
trans_database_time=$(printf "%s " $trans_database | awk '{print $5}')
mail -s "morning batch completion times" "[email protected]" << END_MAIL
echo "<html>"
echo "<body>"
echo "<pre>"
printf "$header" PROCESS DATE
printf "%$totalwidth.${totalwidth}s\n" "$divider"
printf "$format" \
topher "$topher_time" \
big_sync_morning "$big_sync_morning_time" \
etime_prod "$etime_prod" \
database "$database_time" \
trans_c4 "$triggertime" \
trans_database "$trans_database_time"
printf "%s\n"
echo "</pre>"
echo "</body>"
echo "</html>"
END_MAIL
이것은 명령 줄에서 실행하는 프로세스입니다.
PROCESS DATE
============================================
topher_time 06:55.192Z
big_sync_morning_time 07:15:45
etime_prod 07:46.952Z
database_time 08:08:49
trigger 08:38:13,076
trans_database_time 08:55:33
이것은 메일로 발송 된 보고서입니다. 이메일로 보입니다.
echo "<html>"
echo "<body>"
echo "<pre>"
printf "\n %-18s %-16s \n" PROCESS DATE
printf "%44.44s\n" "======================================================"
printf " %-18s %-16s \n" topher_time "06:55.192Z" big_sync_morning_time "" etime_prod "07:46.952Z" database_time "08:08:49" trigger "08:38:13,076" trans_database_time "08:55:33"
printf "%s\n"
echo "</pre>"
echo "</body>"
echo "</html>"
UPDATE하십시오 {} 다음은 메일 명령로 배관의 명령을 주변 는 일 - 좀 다음은 명령을 그룹화하면 printf와 서식을 보존하지 않습니다. 서식을 지정할 수있는 또 다른 방법이 있습니까?
PROCESS DATE
============================================
topher_time 06:55.192Z
big_sync_morning_time 07:15:45
etime_prod 07:46.952Z
database_time 08:08:49
trigger 08:38:13,076
trans_database_time 08:55:33
여기에있는 문서는 명령을 명령으로 실행하지 않습니다. 쉘이 변수/etc를 처리하는 곳을 제외하고는 리터럴 문자열입니다. 확장. 실제로 실행하려면 HERE 문서의 명령을 실제로 실행해야합니다. 그래서 출력물이 "스크립트"그 자체입니다. –