你的任務是useless use of backticks。你只想要
ATTACH="/home/foo/attachments/camera"
但是,如果這是一個靜態字符串,把它放在一個變量中並不真正給你買東西。
要實際提取主題,事\/
必須是一個正則表達式,你想要的主體部分進行匹配之後。
:0
* ^To:.*[email protected]\.com
* ^Subject:[ ]*\/[^ ].+
| munpack -s "$MATCH" -q -C "$ATTACH"
的\/
令牌之前的正則表達式[ ]*
跳過任何前導空格(括號內,你需要一個標籤和一個空格,以匹配任何任何序列)。該[^ ]
匹配字段的第一個非空白字符(不佔空間,而不是標籤),然後我們捕捉行的其餘部分與.+
還要注意適當的引用變量。一般情況下,除非你特別希望shell對該值執行whitespace tokenization and wildcard expansion,否則應該將變量放在雙引號中。
我刪除了c
標誌:0
後,因爲我猜你實際上並不需要的Procmail也做其他的事情與此消息(但這是投機性的,如果我錯了,通過各種手段把它放回去)。
如果確實munpack
不支持-s
那麼也許是這樣的:
:0
* ^To:.*[email protected]\.com
* ^Subject:[ ]*\/[^ ].+
| extract "$ATTACH/$MATCH"
其中extract
是一個腳本像
#!/bin/sh
dest=$1
mkdir "$dest.tmp"
munpack -q -C "$dest.tmp"
set -- "$dest.tmp"/*
test -e "$1" || { rmkdir "$dest.tmp"; echo "$0: $dest: nothing extracted" >&2; exit 2;}
case $# in 1) mv "$1" "$dest"; rmdir "$dest.tmp"; exit 0;; esac
echo "$0: $dest.tmp contains multiple files; halp!"; exit 1
這提取到一個目錄,那麼如果該目錄包含一個文件,將其移動到最終目的地。如果什麼都沒有提取,什麼都不做。如果有多個提取的文件,請提出錯誤。
你肯定能管整個郵件到Python代替,但推功能集成到Python中似乎沒有必要或有益的在這裏。 (再一次,你可能會有另外的上下文以另一種方式提示這些尺度,但是我們對你的問題的瞭解還不夠充分,從而得出這樣的結論。)
我依稀推測'-s'不喜歡接收一個不帶引號的冒號作爲它的值,這就是你的代碼所做的事情(如果傳入的消息實際上在Subject頭部包含一個冒號;如果不是,條件顯然不匹配)。 – tripleee
我快速搜索的'munpack'手冊頁確實不支持'-s'選項,在這種情況下,您的問題變得更加複雜。 https://linux.die.net/man/1/munpack是否與您的版本一致? (哪個版本,在哪個操作系統上,您使用的是否會使用不同的實用程序可以接受?) – tripleee