2015-01-01 2 views
-1

нашел этот способ получить непрочитанную электронную почту из Gmail, но он не работает на моем Mac:Стандартный Linux SED не работает в макинтоше

Я думаю, что СЭД реализация на макинтоше не может быть «стандартным» Linux.

это линия, которую я борюсь с:

MAILCOUNTER=`curl -u $USERID:$PASSWORD --silent "https://mail.google.com/mail/feed/atom" \ 
    | sed -n 's|<fullcount>\(.*\)</fullcount>|\1|p'` 


[email protected] 
PASSWORD=yoursecretpassword 

WAIT=10 

# Loop to check for new mail every X minutes: 
while [ "1" -eq "1" ]; do 

    # Command line to fetch the number of unread emails: 
    MAILCOUNTER=`curl -u $USERID:$PASSWORD --silent "https://mail.google.com/mail/feed/atom" \ 
| sed -n 's|<fullcount>\(.*\)</fullcount>|\1|p'` 

    if [[ "$MAILCOUNTER" = "" ]]; then 
     echo "ERROR: The program coulndn't fetch the account for user \"$USERID\"." 
     echo "- Are you connected to the Internet?" 
     echo -e "- Is the userid and password correct for \"$USERID\"?\n" 
     curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET 192.168.1.50/?emailCount=-1& 

    elif [[ "$MAILCOUNTER" -eq "0" ]]; then 
     echo "* There is 0 new email for user $USERID." 
     curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET 192.168.1.50/?emailCount=0& 

    elif [[ "$MAILCOUNTER" -gt "0" ]]; then 
     echo "* There is $MAILCOUNTER new email for user $USERID." 
     curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET 192.168.1.50/?emailCount=$MAILCOUNTER& 
    fi 

    echo "* Waiting $WAIT seconds before checking for emails again." 
    echo "* (^C to quit the program)" 
    sleep $WAIT 

done 

локонов ошибки, как это, что сводит меня с ума, потому что ввод URL в браузере возвращается правильно, как следует ошибку

<HTML> 
<HEAD> 
<TITLE>Unauthorized</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Unauthorized</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 

URL RETURN:

<feed xmlns="http://purl.org/atom/ns#" version="0.3"> 
<title>Gmail - Inbox for [email protected]</title> 
<tagline>New messages in your Gmail Inbox</tagline> 
<fullcount>1</fullcount> 
<link rel="alternate" href="http://mail.google.com/mail" type="text/html"/> 
<modified>2015-01-02T00:14:36Z</modified> 
<entry> 

Я исправил разрешения почты Google и теперь дворняжка л возвращает

Я получаю от этого:

curl -u MYUSRNAME:MYPASSWORD --silent "https://mail.google.com/mail/feed/atom" 

это:

<?xml version="1.0" encoding="UTF-8"?><feed version="0.3" xmlns="http://purl.org/atom/ns#"><title>Gmail - Inbox for [email protected]</title><tagline>New messages in your Gmail Inbox</tagline><fullcount>1</fullcount><link rel="alternate" href="http://mail.google.com/mail" type="text/html" /><modified>2015-01-02T02:03:50Z</modified><entry><title>test</title><summary>test</summary><link rel="alternate" href="http://mail.google.com/[email protected]&amp;message_id=14aa8623548638bc&amp;view=conv&amp;extsrc=atom" type="text/html" /><modified>2015-01-02T02:03:36Z</modified><issued>2015-01-02T02:03:36Z</issued><id>tag:gmail.google.com,2004:1489150113099430076</id><author><name>the author</name><email>[email protected]</email></author></entry></feed>MacBookPro-2:arduino_gmail_checker admin$ 

Я просто хочу, число здесь:

<fullcount>1</fullcount> 
+1

Каким образом это "не работает"? Если вы отвезли свой автомобиль в гараж и попросили механика исправить его, потому что он «не работает», вы ожидаете, что они смогут вам помочь? –

ответ

3

Есть различия между Мака sed, которая основана на стандартах Unix и BSD, а версия Linux из sed, который основан на gnu и содержит множество разных вариантов, которые не совместимы с другими версиями. Однако, глядя на код, в них нет ничего, что не должно работать на Mac.

Если бы было полезно просмотреть сообщения об ошибках, которые вы видите, чтобы посмотреть, что происходит. Я подозреваю, что это не проблема Mac/sed, которую вы неправильно настраиваете. Нет абсолютно никакой проверки ошибок с помощью команд curl. Если одна из этих команд выйдет из строя, она просто будет продолжаться весело и вывести вывод на sed. Вы уверены, что эти команды curl извлекают данные?

Возьмите строку, которая имеет команду sed и попробуйте вручную запустить его без sed:

Например:

MAILCOUNTER=`curl -u $USERID:$PASSWORD --silent "https://mail.google.com/mail/feed/atom" \ 
| sed -n 's|<fullcount>\(.*\)</fullcount>|\1|p'` 

Попробуйте эти команды из командной строки:

$ USERID=xxxxxx 
$ PASSWORD=xxxxxx 
$ curl -u $USERID:$PASSWORD --silent "https://mail.google.com/mail/feed/atom" 

Делает ли это что-то curl? Если нет, проблема не в sed, а в вашем curl.

Вы также можете попробовать добавить set -xv в начало вашего скрипта и set +xv до конца. Это включает отладку оболочки. Каждая строка будет печататься перед выполнением, а затем снова распечатать все переменные, интерполированные. Это поможет вам отслеживать ошибки в коде.


КИ так что это было разрешение, что с GMAIL, что я решил, ослабив безопасность, и теперь локон возвращается, как описано выше в отредактированном посте

Рад, что мы получили, что обосновались. Вот команда, которую я использовал, чтобы получить количество:

$ curl -s -u$username:$password "https://mail.google.com/mail/feed/atom" \ 
| xmllint --format - \ 
| sed -n 's#<fullcount>\(.*\)</fullcount>#\1#p' 

-s в curl предотвращает отчет о ходе работы. Команда xmllint переформатирует выход, чтобы упростить использование sed. Для того, чтобы посмотреть, что делает, попробуйте:

$ curl -s -u$username:$password "https://mail.google.com/mail/feed/atom" 

против

$ curl -s -u$username:$password "https://mail.google.com/mail/feed/atom" \ 
| xmllint --format - 
+0

ваша интуиция была права ... отредактировано выше –

+0

ОК, так что это была правовая вещь с GMAIL, которую я решил, ослабив безопасность, и теперь завиток возвращается, как указано выше, в отредактированном сообщении –

+0

Спасибо, особенно за показ мне других частей. Я ценю вашу помощь! –

1

Mac СЭД реализация основана на BSD SED и немного отличается от Linux sed. easyest решением является установка gsed (GNU СЭД, доступны из Mac портов, например)

Смежные вопросы