我有一个 bash 脚本,用来迁移一些 IMAP 邮件账户,读取自配置文件。
对于单行条目,它可以正常工作,但是当我有多个账户时,只有第一个条目会起作用,其余的则因某种原因在用户名的开头删除了第一个字符。另外,我用于暂停并等待按键的命令也没有起到暂停的作用。(我可以调试这部分,但如果不必的话我一定会给你点赞!)
我 99% 确信我的问题在于我不完全理解的那一行代码:
值得注意的是,密码中充斥着特殊字符但没有空格。代码如下:
注意:不应该在其他用户已登录的系统上运行此脚本,因为如果他们运行ps aux命令,则可以看到用户名/密码。请参阅imapsync文档以了解更多详细信息。
对于单行条目,它可以正常工作,但是当我有多个账户时,只有第一个条目会起作用,其余的则因某种原因在用户名的开头删除了第一个字符。另外,我用于暂停并等待按键的命令也没有起到暂停的作用。(我可以调试这部分,但如果不必的话我一定会给你点赞!)
我 99% 确信我的问题在于我不完全理解的那一行代码:
CREDS=(${VAR// / })
值得注意的是,密码中充斥着特殊字符但没有空格。代码如下:
#! /bin/bash
# Script to help migrate email account contents
# must have accounts all ready set up and using IMAP
# uses hardcoded dovecot master user on host2 too bad host1 is stupid courier
# uses file mailusers.cfg for users and passwords
# one entry per line - format is:
# username@domain.com passwordstring
while read p; do
VAR=$p
CREDS=(${VAR// / })
VARUSER=${CREDS[0]}
VARPASS=${CREDS[1]}
OUTPUT="Username: $VARUSER Password: $VARPASS"
echo $OUTPUT
imapsync --host1 123.456.789.123 --user1 $VARUSER --password1 $VARPASS --authmech1 PLAIN --host2 999.888.777.123 --user2 $VARUSER*masteruser@mydomain.com --password2 notreallypasswordXD --authmech2 PLAIN --exclude 'Trash|Spam'
echo "Done!"
echo
read -n 1 -s
done < mailusers.cfg
注意:不应该在其他用户已登录的系统上运行此脚本,因为如果他们运行ps aux命令,则可以看到用户名/密码。请参阅imapsync文档以了解更多详细信息。
${^VAR// / }
。在正则表达式中,插入符号表示行的开头,除非它在 [] 中。 - sparks