Zsh

如何通過腳本提示輸入密碼來檢查 GMail 郵件?

  • August 23, 2014

我正在使用 Putty 通過 SSH 在 Ubuntu 14.04 上使用 zsh,並且正在為我的鍵盤設置鍵綁定。因為 zsh 似乎沒有使用我的功能鍵,所以我想我會設置腳本來執行類似於鍵上圖片所代表的操作。我正在處理電子郵件按鈕,它執行良好,但我希望它變得更好。這就是我所擁有的~/.zshrc

# Ensure we are in emacs mode
bindkey -e

# This requires you to enable the ATOM feed in Gmail. If you don't know what that is then
# go ahead and try this and let it fail. There will then be a message in your inbox you
# can read with instruction on how to enable it. Username below should be replaced with 
# your email id (the portion of your email before the @ sign).
_check-gmail() {
   echo
   curl -u username:password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 - \1/p"
   echo
   exit
}
zle -N _check-gmail


# F2 - Display Unread Email
bindkey "^[[12~" _check-gmail

當像上面那樣使用時,它可以工作。我有兩個問題。

首先,我寧願讓它要求我輸入密碼,而不是像這樣將其留在腳本中。這可以通過:password在命令行中從 curl 命令中刪除來輕鬆完成,但是在此文件中使用時會導致問題。具體來說,它似乎接受了第一次按鍵但其餘的退出到另一個不是密碼輸入的外殼。

其次,我第一次在 shell 中執行它時效果很好。之後,它不會正確返回到提示。我需要按下Enter以獲得另一個提示。有沒有辦法解決這個問題?

我已將.zshrc文件的完整鍵綁定部分放在GitHub 上

問題是curl需要一些正常的終端設置,而zle不是期望您更改終端設置。所以你可以改寫它:

_check-gmail() {
 zle -I
 (
   s=$(stty -g)  # safe zle's terminal setting
   stty sane     # sane settings for curl
   curl -u username --silent "https://mail.google.com/mail/feed/atom" |
    tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' |
    sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 - \1/p"
   stty $s       # restore zle's terminal settings
 ) < /dev/tty
}

引用自:https://unix.stackexchange.com/questions/151600