为什么这个shell脚本没有从stdin收集所需的信息?

时间:2012-08-14 06:11:54

标签: bash centos

使用案例:我想将procmail中的电子邮件消息传递给shell脚本,并让脚本将 Subject:标头值存储为一个变量,返回路径:标题值。

作为测试,我使用以下脚本:

#!/bin/bash
while read data; do
        SearchCriteria1=$(echo "$data" | grep "Subject: " | cut -c 9-)
        SearchCriteria2=$(echo "$data" | grep "Return-Path: " | cut -c 13-)
        echo "$SearchCriteria1" > test.1
        echo "$SearchCriteria2" > test.2
done

echo语句只是一个测试。我打算稍后在脚本中使用变量。

当我尝试这个时,test.1和test.2只有空白行。我知道我错过了一些明显的东西。有人可以指点我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

对于每一行,您都会使用该行,或者使用该行或不使用该行。然后用该行覆盖一个文件(大多数迭代可能是空的)。因此,如果这两个文件都为空,则最后一行输入不包含Subject:Return-Path:

这可能是我做的:

#!/usr/bin/env bash
while read -r key value; do
    case $key in 
        Subject:) subject=$value;;
        Return-Path:) return_path=$value;;
    esac
done
echo "<$subject> <$return_path>"

我说可能是因为我不知道输入会是什么样的。

另见http://mywiki.wooledge.org/BashFAQ/001

相关问题