it-swarm-tr.com

Linux'un DOS duraklamasına eşdeğer nedir?

İçinde kullanıcı bir tuşa basana kadar yürütmeyi duraklatmak istediğim bir Bash Shell betiğim var. DOS'ta bu kolayca "pause" komutuyla gerçekleştirilir. Senaryomda kullanabileceğim bir Linux eşdeğeri var mı?

212
jt.

read bunu yapar:

[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$ 

-n1, yalnızca tek bir karakter bekleyeceğini belirtir. -r onu ham moda getirir, çünkü gereklidir, aksi halde ters eğik çizgi gibi bir şey basarsanız, bir sonraki tuşa basana kadar kayıt olmaz. -p, boşluk içeriyorsa kote edilmesi gereken İstem'i belirtir. key argümanı sadece hangi tuşa bastıklarını bilmek istiyorsanız gereklidir, bu durumda $key yoluyla erişebilirsiniz.

Bash kullanıyorsanız, -t ile bir zaman aşımı belirtebilirsiniz; bu, bir tuşa basılmadığında okunan hataların geri dönmesine neden olur. Yani örneğin:

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
306
Jim

Bu yolları çok kısa olanları kullanıyorum ve @theamedguy ve @Jim çözümleri gibi, ek olarak zaman aşımı ve sessiz mod da kullanıyorum.

Özellikle son davayı seviyorum ve kullanıcı basana kadar bir döngüde çalışan birçok komut dosyasında kullanıyorum Enter.

Komutları

  • Çözümü girin

    read -rsp $'Press enter to continue...\n'
    
  • Kaçış çözümü (-d $ '\ e' ile)

    read -rsp $'Press escape to continue...\n' -d $'\e'
    
  • Herhangi bir önemli çözüm (-n 1 ile)

    read -rsp $'Press any key to continue...\n' -n 1 key
    # echo $key
    
  • Önceden seçilmiş seçeneklerle sor (-ei $ 'Y' ile)

    read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
    # echo $key
    
  • Zaman aşımı çözümü (-t5 ile)

    read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
    
  • ykuda geliştirilmiş takma ad

    read -rst 0.5; timeout=$?
    # echo $timeout
    

Açıklama

- r, "\" veya "^" gibi birleştirilmiş karakterlere izin vermeyen ham modu belirtir.

- s sessiz modu belirtir ve çünkü klavye çıktısına ihtiyacımız yoktur.

- p $ ' İstemi ', boşluk ve karakterlerin çıkmasına izin vermek için $ 'ile' arasında olması gereken İstemi belirtir . Dikkatli olun, kaçan karakterlerden yararlanmak için tek tek tırnak işareti arasına dolar işareti koymalısınız, aksi halde basit tırnak işaretleri kullanabilirsiniz.

- d $ '\e ' sınırlayıcı karakteristiği olarak kaçmayı belirtir, geçerli giriş için son bir karakter olarak bu mümkündür Herhangi bir karakter koymak ancak kullanıcının yazabileceği bir karakter koymak için dikkatli olun.

- n 1 , yalnızca tek bir karaktere ihtiyacı olduğunu belirtir.

- e okuma satırı modunu belirtir.

- i $ 'Y', okuma satırı modunda başlangıç ​​metni olarak Y'yi belirtir.

- t 5 5 saniyelik zaman aşımını belirtir

tuşu , girişi, nn durumunda, basılan anahtarı bilmeniz gerektiğinde kullanın.

$? son programın çıkış kodunu bilmek için kullanılır, okuma için, zaman aşımı durumunda 142, 0 doğru giriş. $ Koymak? somes komutlarından sonra test etmeniz gerekiyorsa, en kısa sürede bir değişken olarak, çünkü tüm komutlar $ 'ı tekrar yazardı?

146
y.petremann

Bu benim için bu diğer çözümlerin bazılarının olmadığı (burada en popüler olanlar da dahil) Linux'un çeşitli lezzetleri üzerinde çalıştı. Bence daha okunaklı ...

echo Press enter to continue; read dummy;

Bir değişkenin read değişkenine argüman olarak verilmesi gerektiğini unutmayın.

13
BuvinJ

Herhangi bir parametre olmadan read sadece enter ..__ tuşuna basarsanız devam eder .. DOS pause komutu herhangi bir tuşa basarsanız devam eder. Bu davranışı istiyorsanız read –n1 kullanın.

12
xsl

read -n1 taşınabilir değil. Aynı şeyi yapmanın taşınabilir bir yolu olabilir:

(   trap "stty $(stty -g;stty -icanon)" EXIT
    LC_ALL=C dd bs=1 count=1 >/dev/null 2>&1
)   </dev/tty

read kullanmanın yanı sıra, devam etmek için sadece bir basın ENTER için Hemen Yapabilirsiniz

sed -n q </dev/tty
8
mikeserv

Yalnızca bir döngüyü veya komut dosyasını duraklatmanız gerekiyorsa ve herhangi bir tuş yerine Enter tuşuna basmaktan memnunsanız, o zaman read kendi kendine işe yarar.

do_stuff
read
do_more_stuff

Son kullanıcı dostu değildir, ancak kendiniz için hızlı bir komut dosyası yazdığınızda ve arka planda elle bir şeyler yapmak için onu duraklatmanız gerekebilir.

2
mwfearnley

Bunu dene:

function pause(){
   read -p "$*"
}
1
Alex Fort

Bu işlev hem bash hem de zsh içinde çalışır ve terminale G/Ç sağlar:

# Prompt for a keypress to continue. Customise Prompt with $*
function pause {
  >/dev/tty printf '%s' "${*:-Press any key to continue... }"
  [[ $ZSH_VERSION ]] && read -krs  # Use -u0 to read from STDIN
  [[ $BASH_VERSION ]] && </dev/tty read -rsn1
  printf '\n'
}
export_function pause

Büyük Adalet için .{ba,z}shrc içine koy!

1
Tom Hale

readkullanmak için Evet - ve hem cronhem de terminalde onu en kullanışlı yapan birkaç ayar vardır.

Örnek:

time rsync (options)
read -n 120 -p "Press 'Enter' to continue..." ; echo " "

-N 120, okuma deyimini 2 dakika sonra zaman aşımına uğrar, böylece croniçinde engellemez.

Terminalde, rsynckomutunun ne kadar sürdüğünü görmek 2 dakika verir.

Ardından sonraki echoname__, sonraki bash İstemi bir sonraki satırda görünecek şekildedir.

Aksi takdirde, aynı satırda, "devam et ..." den sonra doğrudan aynı satırda gösterilir. Enter terminalde basıldığında.

0
SDsolar