CTRL + C tuşlarına basarken komutun durmasını engelle


28

Bu yüzden, biraz Zork 1 çalıyordum ve bir arkadaşımı göstermek için bir metin kopyalamaya gittim, ancak yanlışlıkla CTRL+ tuşlarına basarken üst karakter tuşunu basılı tutmayı unuttum C. Bu komutu durdurdu ve Zork verilerimi kaybettim ...

CTRL+ Tuşlarına basarken komutu durdurmayı önlemek için kullanabileceğim bir tür "yardımcı" var Cmı?

Zork'un terminalin içinde çalıştığını unutmayın. Farklı eylemler gerçekleştirmek için komutlar verdiğiniz terminal tabanlı bir oyundur.


Yani Ctrl + c'nin tüm uygulamaları tamamen sonlandırmayı engellemesini mi istiyorsunuz? Gelecekte felaket olabilir.
jobin

Yanıtlar:


30

Kombinasyon Ctrl+ Ckarakteri karakteri gönderir ^C(bayt değeri 3). Bu, terminalin SIGINT sinyalini ön planda çalışan programa göndermesine neden olur¹ . Bu sinyal için konvansiyonel eylem, mevcut komutu kesmektir: ardışık komutları işlemek için tasarlanan programlar, tek bir toplu komut veya sürekli bir etkileşim çıkışı olarak tasarlanan programlar, üst seviye komut istemine geri döner. Açıkçası kullandığınız program ikinci modele göre tasarlandı.

Bu sinyal gönderme anahtarı, tüm terminal emülatörleri ve gerçek fiziksel terminaller tarafından paylaşılan, çekirdekteki genel terminal arayüzünün bir özelliğidir. Komutla hangi tuşun bu sinyali CtrlZgöndereceğini ve ayrıca diğer tuşları (özellikle ön plan programını askıya almak için SIGSTOP gönderen) yapılandırabilirsinizstty . SIGINT tuşunu Ctrl+ _(geçerli terminalde) konumuna getirmek için:

stty intr '^_'

Tamamen devre dışı bırakmak için:

stty intr ''

Tüm ayarları varsayılanlara sıfırlamak için:

stty sane

Anahtar isteğe bağlı bir tuş birleşimi olamaz, tek baytlık bir değer olması gerekir. sttyBazı programlar (özellikle tam ekran metin modu programları) kendi klavye kısayol işlem yaparlar - ayar programları tarafından geçersiz kılınan olabilir.

Prec Daha kesin olarak , terminalin kontrol terminali olduğu ön plan işlem grubundaki tüm işlemlere .


32

CTRL+ , ön plandaki işe Ckesme sinyali ( SIGINT2 numaralı sinyaldir) gönderir . trap '' 2Zork'u başlatmadan önce komutu kullanarak sinyali "yakalayarak" bunu devre dışı bırakabilirsiniz .

Yeniden etkinleştirmek CTRL+ C(untrap SIGINTbirlikte) trap 2.

İpucu : Şuna şöyle bir şey ekleyebilirsin ~/.bashrc:

alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"

Bu şekilde, sinyali devre dışı bırakmayı ve yeniden etkinleştirmeyi asla unutmazsınız ve oyuna sadece zorkterminale yazarak başlamak kolaydır .

Not : Sizin için daha uygunsa, sayı yerine sinyal adını kullanabilirsiniz, örneğin trap '' sigintveya trap '' int. Sadece sayıları kullanmaya alışkınım, örn kill -9.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.