스크립트를 통해 비밀번호를 묻는 Gmail 메시지를 확인하는 방법은 무엇입니까?

스크립트를 통해 비밀번호를 묻는 Gmail 메시지를 확인하는 방법은 무엇입니까?

Ubuntu 14.04에서 zsh를 사용하여 SSH를 통해 Putty를 사용하고 있으며 키보드에 대한 키 바인딩을 설정하고 있습니다. 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명령줄에서 컬 명령을 제거 하면 쉽게 수행할 수 있지만 이 파일에서 사용하면 문제가 발생합니다. 구체적으로 말하면 첫 번째 키 입력은 허용하는 것처럼 보이지만 나머지 키 입력은 비밀번호 입력이 아닌 다른 셸로 종료됩니다.

둘째, 쉘에서 처음 실행했을 때 잘 작동했습니다. 그 후에는 프롬프트가 올바르게 반환되지 않습니다. Enter다른 메시지를 받으려면 버튼을 눌러야 합니다 . 이 문제를 해결할 방법이 있나요?

.zshrc파일의 전체 키바인딩 섹션을 다음 위치에 넣었습니다.GitHub.

답변1

문제는 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
}

답변2

한 가지 방법은 함수를 실행하기 전에 사용자에게 메시지를 표시하여 _check-gmail스크립트의 변수에 비밀번호를 포함시키는 것입니다. 그런 다음 명령에서 curl사용할 수 있도록 비밀번호 변수를 함수에 전달합니다.

예를 들어:

$ tst_fun () { echo "Parameter #1 is $1"; }
$ tst_fun "my_pass"
Parameter #1 is my_pass
$ 

스크립트 사용자로부터 비밀번호를 얻으려면 몇 가지 옵션이 있습니다. 멋진 GUI를 원한다면 zenity비밀번호를 묻는 대화 상자를 띄울 수 있습니다.

예를 들어:

my_pass=$(zenity --password)
echo "$my_pass"

                                          SS #1

이제 위의 명령을 실행하면 대화 상자에 입력된 결과가 변수에 표시됩니다 $my_pass. 따라서 대화 상자에 "supersecret"이라는 비밀번호를 입력하면 다음과 같은 메시지가 표시됩니다.

$ my_pass=$(zenity --password)
$ echo $my_pass
supersecret

관련 정보