bash - imapsync:在没有LF的情况下发送的BAD CR

时间:2018-02-13 08:49:15

标签: bash

我已经在imapsync中编写了大量传输脚本:

#!/bin/sh
echo
{ while IFS=';' read  u1 p1 u2 p2; do
        echo "==== Starting transfer for $u2 ===="
        imapsync \
                --host1 "src.host.com" --user1 "$u1" --password1 "$p1" \
                    --noauthmd5 \
                    --sep1 "." --prefix1 "" \
                --host2 "desc.host.com" --user2 "$u2" --password2 "$p2" \
                    --sep2 "." --prefix2 "" \
                --folder "INBOX" \
                > ./logs/"$u1".log
        echo "==== Ended transfer for $u2 ===="
done ; } < cred.txt

这就是cred.txt

的外观
src@email.com;password!;dest@email.com;3kXxFQBm7u
(empty line)

现在,当我尝试运行此脚本时,我得到了:

==== Starting transfer for dest@email.com ====
2 BAD CR sent without LF
        ...propagated at /usr/bin/imapsync line 759.
==== Ended transfer for dest@email.com ====

但如果我输入第二个密码staticaly(代码将如下所示) - 它正在工作,为什么?

#!/bin/sh
echo
{ while IFS=';' read  u1 p1 u2 p2; do
        echo "==== Starting transfer for $u2 ===="
        imapsync \
                --host1 "src.host.com" --user1 "$u1" --password1 "$p1" \
                    --noauthmd5 \
                    --sep1 "." --prefix1 "" \
                --host2 "desc.host.com" --user2 "$u2" --password2 "3kXxFQBm7u" \
                    --sep2 "." --prefix2 "" \
                --folder "INBOX" \
                > ./logs/"$u1".log
        echo "==== Ended transfer for $u2 ===="
done ; } < cred.txt

3 个答案:

答案 0 :(得分:1)

由于问题仅在于行尾的密码,因此您的文件可能具有CRLF换行符,因为它是在Windows系统上创建的。用

修复它
dos2unix cred.txt

答案 1 :(得分:0)

如果您的系统中没有dos2unix且您也不是root用户,那么您也可以使用以下命令删除这些托架字符:

tr -d '\r' < Input_file > temp_file && mv temp_file Input_file
OR
awk '{gsub(/\r/,"")} 1' Input_file > temp_file && mv temp_file Input_file

答案 2 :(得分:0)

添加额外的;在cred.txt的每一行的末尾,像这样:

src@email.com;password!;dest@email.com;3kXxFQBm7u;