Bazı komut dosyası kavramlarını öğrenmek için bir bash sarmalayıcı yazıyorum. Bu fikir, bash'ta bir komut dosyası yazmak ve girişte bir kullanıcı kabuğu olarak ayarlamaktır. SIGINT, bash betiğinde okumayı iptal etmek için mi?
Bir süre döngü olduğunuread
s- ve
eval
s kullanıcının giriş yaptı, sonra, senaryo böylece kullanıcı oturum biter iptal kullanıcı
CTRL + C
yazdığınız zaman, fark ettim.
Bunu önlemek için
, ben tuzağa hiçbir şey yapmadan,SIGINT
tuzağa düşürdü.
Şimdi, sorun, komutun yarısında CTRL + C
yazdığınızda, bir bash'ın yaptığı gibi iptal edilemez - sadece CTRL + C
öğeyi yok sayar.
ping stockoverf^Cping stackoverflow.com
yazdığımda, istediğim ping stackoverflow.com
yerine ping stockoverfping stackoverflow.com
alırım.
Bunu yapmanın bir yolu var mı?
#!/bin/bash
# let's trap SIGINT (CTRL + C)
trap "" SIGINT
while true
do
read -e -p "$USER - SHIELD: `pwd`> " command
history -s $command
eval $command
done
Ctrl-A göndermek için xdotool gibi bir araç kullanabilirsiniz
xdotool% 100 hack olarak, hile yapardı. Bir '^ C^A^K' ve saf bash (sadece '^ C') göstermeyecek boş bir satır olsun, ama hiçbir şeyden daha iyidir. Her neyse, xdotool'a bağlı olmamak ve bu ekstra işaretleyicileri önlemek için harika olurdu. Neyse, rtfm davetini almadım ... Hata ayıklama bana ne gösterir? – mgarciaisaia
Evet, bu büyük bir hack. Ama eyalette, bu iş yapıyor. Orijinal fikri takip etmenin doğru yolu, ioctl aracılığıyla dosya tanımlayıcılarına erişmelidir. –
@mgarciaisaia Ne hakkında * hata ayıklama * ve nasıl kullanılabilir. [nanosaniye cinsinden profiling bash] 'a bir göz atın (http://stackoverflow.com/a/20855353/1765658) –