GNU/Linux >> Znalost Linux >  >> Linux

Jak číst pouze jeden znak ve skriptu shellu

V ksh můžete v podstatě udělat:

stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw

read -n1 funguje pro bash

stty raw režim zabraňuje ctrl-c v práci a může vás uvíznout ve vstupní smyčce bez cesty ven. Také manuálová stránka říká stty -raw není zaručeno, že vrátí váš terminál do stejného stavu.

Takže stavíme na dtmilanově odpovědi pomocí stty -icanon -echo se těmto problémům vyhýbá.

#/bin/ksh
## /bin/{ksh,sh,zsh,...}

# read_char var
read_char() {
  stty -icanon -echo
  eval "$1=\$(dd bs=1 count=1 2>/dev/null)"
  stty icanon echo
}

read_char char
echo "got $char"

V bash read umí to:

read -n1 ans

Linux
  1. Jak zacházet s přepínači ve skriptu Shell?

  2. Jak volat jiný skript Shell jako podprogram?

  3. Jak číst celý skript Shell před jeho spuštěním?

  1. Jak vytvořit dočasný soubor ve skriptu Shell?

  2. Jak číst značky MP3 v prostředí Shell?

  3. Jak vytvořit animaci rotace pomocí skriptu Shell?

  1. Jak spouštět skripty Pythonu ze shellu

  2. Jak spustit skript shellu při spuštění

  3. Jak číst soubor .properties, který obsahuje klíče, které mají tečku pomocí skriptu Shell