Fungovalo to pro mě na několika variantách Linuxu, kde některá z těchto jiných řešení ne (včetně těch nejoblíbenějších zde). Myslím, že je to také čitelnější...
echo Press enter to continue; read dummy;
Všimněte si, že proměnnou je třeba zadat jako argument pro read
.
Hodně používám tyto způsoby, které jsou velmi krátké a jsou jako řešení @theunamedguy a @Jim, ale navíc s časovým limitem a tichým režimem.
Obzvláště miluji poslední případ a používám ho ve spoustě skriptů, které běží ve smyčce, dokud uživatel nestiskne Enter .
Příkazy
-
Zadejte řešení
read -rsp $'Press enter to continue...\n'
-
Únikové řešení (s -d $'\e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
Jakékoli klíčové řešení (s -n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
Otázka s předvybranou možností (s -ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
Řešení časového limitu (s -t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
-
Alias s vylepšeným režimem spánku
read -rst 0.5; timeout=$? # echo $timeout
Vysvětlení
-r specifikuje nezpracovaný režim, který nepovoluje kombinované znaky jako "\" nebo "^".
-s určuje tichý režim, a protože nepotřebujeme výstup z klávesnice.
-p $'výzva ' určuje výzvu, která musí být mezi $' a ', aby byly ponechány mezery a znaky s escapováním. Buďte opatrní, musíte vložit mezi jednoduché uvozovky se symbolem dolaru, abyste využili uvozovky, jinak můžete použít jednoduché uvozovky.
-d $'\e ' specifikuje escappe jako oddělovací znak, takže jako konečný znak pro aktuální položku je možné vložit jakýkoli znak, ale buďte opatrní, abyste vložili znak, který může uživatel zadat.
-n 1 určuje, že potřebuje pouze jeden znak.
-e určuje režim readline.
-i $'Y ' určuje Y jako počáteční text v režimu čtení řádku.
-t 5 určuje časový limit 5 sekund
klíč slouží v případě, že potřebujete znát vstup, v případě -n1 klávesu, která byla stisknuta.
$? slouží ke zjištění výstupního kódu posledního programu, pro čtení, 142 v případě časového limitu, 0 správný vstup. Vložit $? v proměnné co nejdříve, pokud ji potřebujete otestovat po některých příkazech, protože všechny příkazy by přepsaly $?
read
dělá toto:
[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$
-n1
určuje, že čeká pouze na jeden znak. -r
přepne jej do raw režimu, což je nezbytné, protože jinak, pokud stisknete něco jako zpětné lomítko, nezaregistruje se, dokud nestisknete další klávesu. -p
určuje výzvu, která musí být uvedena v uvozovkách, pokud obsahuje mezery. key
argument je nutný pouze v případě, že chcete vědět, kterou klávesu stiskli, v takovém případě k němu můžete přistupovat přes $key
.
Pokud používáte Bash, můžete také určit časový limit pomocí -t
, což způsobí, že čtení vrátí selhání, když není stisknuta klávesa. Takže například:
read -t5 -n1 -r -p 'Press any key in the next five seconds...' key
if [ "$?" -eq "0" ]; then
echo 'A key was pressed.'
else
echo 'No key was pressed.'
fi
read
bez jakýchkoliv parametrů bude pokračovat pouze pokud stisknete enter. DOS pause
příkaz bude pokračovat, pokud stisknete libovolnou klávesu. Použijte read –n1
pokud chcete toto chování.