![스크립트를 통해 비밀번호를 묻는 Gmail 메시지를 확인하는 방법은 무엇입니까?](https://linux55.com/image/54481/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%EB%A5%BC%20%EB%AC%BB%EB%8A%94%20Gmail%20%EB%A9%94%EC%8B%9C%EC%A7%80%EB%A5%BC%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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"
이제 위의 명령을 실행하면 대화 상자에 입력된 결과가 변수에 표시됩니다 $my_pass
. 따라서 대화 상자에 "supersecret"이라는 비밀번호를 입력하면 다음과 같은 메시지가 표시됩니다.
$ my_pass=$(zenity --password)
$ echo $my_pass
supersecret