Bash getch

| | | | |
אחד המאפיינים של כלים בסביבת UNIX הוא הימנעותם מאינטראקטיביות. כך אפשר לשרשרם זה לזה, בלי שיש להם צורך להכריז על השקפתם הפוליטית, אירועים חשובים בעברם, או איזו הערה סתמית על חיבתם לדגים. הם גם לא יעצרו כדי לשאול אותך, אם אתה רוצה ללכת לאיזה מקום היום, או יציינו שנראה שאתה מנסה לדחוף המהדק המשרדי לתוך השקע החשמלי, ואם ברצונך ליישר אותו תחילה, על־מנת שייכנס בייתר קלות? אבל לפעמים ה־ script, נדרש לעצור ולשאול "האם את/ה בטוח/ה ש..." לפני שהוא ממשיך.

כמובן ניתן להשתמש ב־ read אבל אז אנחנו עובדים במסגרת המגבלות של readline ונדע מה אמרו לנו רק לאחר שהמשתמש לחץ על Enter. כמו כן קיימים dialog, xdialog ו־ kdialog שנותנים פתרון יפה לבעיה, אבל כאשר רצוי להימנע מהוספת תלויות, ו־ getch יספיק לצורך העניין, ישנו פתרון יותר פשוט.

לפני ימים אחדים נחשפתי ל־ shcursus הוותיקה, שם ראיתי מימוש של getch
עבור Korn Shell, ועל בסיס זה כתבתי את ה־ getch שלי:

function getch() {
  local saved=$(stty --save)
  stty raw -echo
  eval $1=$(dd bs=1 count=1 2> /dev/null)
  local status=$?
  stty $saved
  return $status
}



ואז

getch A
echo "the user typed '$A'"


ובא לציון גואל.

תודה שקראתם,

-- חן.

אפשרויות לתצוגת תגובות

בחרו באפשרות התצוגה הרצויה, ולחצו על "שמור הגדרות".

מה רע ב- read -n 1 answ...

מה רע ב-
read -n 1 answer
?

:)