2009-04-13 14 views
8

bitirmek için 1 dakikadan fazla sürerse sesi gelecek şekilde. o ben o azam var falan .. butonu sonrasına kadar orada birkaç dakikada bip üzerinde devam edersebash komut benim bash sesli ikaz etmesi için i çalıştıran komut belirli bir duvar zamandan daha daha (diyelim 1 dakika) atarsan, arıyorum

.

Zeki fikirleriniz var mı?

Ben son çare olarak ekranın monitör işlevini kullanabilirsiniz. (Ben cygwin'dayım ama bu önemli değil).

Beni açık anlatalım: sizin için bipleyecektir Linux komutları vardır

$ ls  
    < output appears > 
$ rsync foo bar 
    < since this takes lot of time, i switch to other console 
     and forget this .. .and remember only after some time > 
    < so when this finished, i want it to beep > 
+0

Umarız sağlanan komut dosyası, ihtiyacınız olan şeydir – Drakosha

cevap

2

. Ubuntu (ve muhtemelen diğer dağıtımlar) ile mevcut bip için kaynak kodunu kontrol edin veya başka bir kaynak için http://www.johnath.com/beep/beep.c'a bakın (aynı kod, inanıyorum).

O kolaylıkla (diğer şeyler arasında) sıklığı, uzunluğu ve tekrarları kontrol etmenizi sağlar.

aslında arka planda gerçek işçi programı başlatan bir komut dosyasına gerek o zaman bitene kadar bip, bir "sleep 60" döngüye gider edeceğiz işe almak için.

Aşağıdaki komut dosyası iyi bir başlangıç ​​olmalıdır. Sen gibi bir şey ile çalıştırın:

beeper sleep 3600 

ve tamamlanana kadar her dakika bip, arka planda sleep 3600 çalışır.

Bu şekilde çalışır. Argümanları bir arka plan süreci olarak çalıştırır ve işlem kimliğini kaydeder. Daha sonra her birkaç saniyede bir döngüye girer, durum değiştiğinde kontrol edilir ve bu durumda bip sesi çıkar (böylece ilk bip sesi bir dakikaya kadar olabilir). işlem ps çıktısından kaybolur

döngü çıkış olur.

Arkaplanda arka planı yerleştirmek için 3600 & numaralı sesli uyarı bile yapabilirsiniz. Biplemeyi durdurmak için, bipleyici işlemini (eğer işin bip sesi olmadan devam etmesini istiyorsanız) ya da işçi sürecinin kendisini öldürmesini (hem işi hem bip sesi durduracak) öldürün.

+1

1. '$ *'? Wordsplitting ve pathname genişlemesi bebeklerinizi yiyecektir. 2. PID'nin hala canlı olup olmadığını kontrol etmek için? Nonono, adam öldür, öldür -0'yu oku. 3. Çok mu özlü? – lhunath

+0

Bu yüzden, komut dosyasının bir başlangıç ​​olduğunu söyledim (ayrıca, komutun başlatılıp başlatılmayacağı konusunda bir yardım mesajı veya hata denetimi gibi başka özellikler eklemedim). Ps çalışıyor, bu yüzden başka bir işlevselliğe sahip olmasına rağmen, onu değiştirmeye gerek yok ('-0' kill -0 'hakkında bilmediğimi itiraf ediyorum, güzel). – paxdiablo

-1

bash çalışır eğer ama

command && echo ^G 

(ctrl-g) gibi birçok kabukları bir şey ile, hazırlıksız bilmiyorum komutun başarıyla tamamladıktan sonra bip sesi çıkarır. Bu, uzun süren bir komut yürütmek istediğinizde ve sonra başka bir pencerede çalışmaya başladığınızda, ancak ilk şey bittiğinde bildirim aldığınızda genellikle yararlıdır. (Bu hedef ya değilse ben anlamış değilim.) Ben böyle bir şey kullandım eminim

0

: sınamak için kullanışlı bir * Nix kabuk yok

echo "\007" 

.Benim için

+1

'echo -e" \ 007 "' linux/bsd'de benim için çalışıyor – xkcd150

0
echo "\007" 
  • bip.

    $!

  • , bash arka planda çalıştırılan son işlemin pidini döndürür, böylece üzerinde uyuyabilir ve hala çalışıyor olup olmadığını doğrulayabilirsiniz.

Daha açık olmak gerekirse, $! ve sonsuz döngüde uyuyun ve yukarıdaki pid'in hala canlı olup olmadığını kontrol edin.

#! /bin/bash 

if [[ "$#" != "1" ]] 
then 
    echo "Usage: $0 <command>" 
    echo "Will wait till the command finishes and starts beeping once a minute" 
    exit 1 
fi 

CMD="$1" 
SECS_BETWEEN_BEEPS="60" 

# echo commmand and start time: 
echo "@@ Command: '${CMD}'" 
echo "@@ Starting at `date`" 

# execute and wait till finish: 
"${CMD}" 
wait 

# echo finish time: 
echo "@@ Finished at `date`" 

# beep once in SECS_BETWEEN_BEEPS: 
while ((1)) 
do 
    echo -en '\a' 
    sleep "${SECS_BETWEEN_BEEPS}" 
done 
-2

Burada birbirinden tamamen farklı şeyler soruyorsun:

sonra (umarım) istediğini anlayarak, burada kod. Öncelikle bir dakika sonra bip sesleri almak için ne yapmanız gerektiğini sorarsanız, komut bittikten sonra bip sesini almayı istersiniz. Bunlar tamamen farklı olan iki şey.

# bof [command] [args...] - Beep on Finish 
bof() { 
    "[email protected]"; local r=$? 

    printf '\a' 
    return $r 
} 

Bu fonksiyon, bir komutu çalıştırır ve sonra bir kez bir kez bip komut bitti, komutun çıkış kodu fonksiyonunun çıkış kodudur emin yaparken. Komut bu saatten önce (burada, 60 saniye, bir dakika) tamamlandı sürece

# bot [command] [args...] - Beep on Timeout 
bot() { 
    { sleep 60; printf '\a'; } & 

    "[email protected]"; local r=$? 

    kill $! 
    return $r 
} 

Bu fonksiyon, belirli bir süre sonra bir kez bip.

# bem [command] [args...] - Beep every Minute 
bem() { 
    { while sleep 60; do printf '\a'; done; } & 

    "[email protected]"; local r=$? 

    kill $! 
    return $r 
} 

Bu sürece komut hala hayatta olduğu gibi her dakika bip önceki fonksiyonunun basit bir uyarlamasıdır.

# bofem [command] [args...] - Beep on Finish every Minute 
bofem() { 
    "[email protected]"; local r=$? 

    until read -t 60 -n 1; do printf '\a'; done 
    return $r 
} 

Ve nihayet, komut tamamlandıktan her dakika ama sonra bip bir fonksiyonu. Durdurmak için bir tuşa basana kadar bip sesi çıkarır. Ardından, işlev komutunuzun çıkış koduyla döner.

Sorunuzla ilgili olarak tasarlayabileceğiniz tüm temelleri kapsayacağını düşünüyorum.

kullanımı (ve birleştirmek) onları şöyle:

bof rsync foo bar:  # Beep when rsync finishes. 
bot ssh foo 'ls bar/' # Beep if the 'ssh' process takes too long to run. 
0

Ben Pax tarafından sağlanan cevabı gibi.

[email protected]:/usr/src/linux # beep --help 

Kullanımı: yapabileceklerini 'bip' göz at bip [-f frekansı] [-l uzunluk] [ temsilcileri -r] [-d gecikme] [-D gecikme] [ -s] [-c] [-e aygıtı]

bip [Seçenekler ...] [-n] [--new] [Seçenekler ...] ... bip [-h] [- -help] Yani [-v] [-V] [version]

bip, siz bip (uzun, yüksek sesle bunları yaparken veya her ikisi) salınım olabilir Program beklenenden daha uzun süre çalışmaya devam ediyor.

Üzerinde çalışıyorsanız, komut dosyasının herkesin en sevdiği 80'lerin hit'lerinin MUSAC sürümlerini oynatabilirsiniz; bu, herhangi bir nedenle durmaktan başka bir neden olmasa bile, bir başkasını terminale çekecektir.

3

Alçakgönüllü bir öneri: Bildiğiniz bir komutunuz varsa, komut satırını bir yarım kolon ile takip edin, sonra bip sesi verin.

rsync foo bar; beep