Terminaldeki uzun bir komut bitince haber alın

Kırk dakikalık bir derlemeye dadılık etmeyi bırakın. Herhangi bir komutun ardına bir satır, sonucu telefonunuza gönderir — çoktan kalkıp gitmiş olsanız bile.

Güncellendi

İçindekiler

Bir eğitim koşusu, tam bir test paketi, bir docker build ya da uzun bir görevi işleyen bir yapay zekâ kodlama ajanı başlatıyorsunuz. Sonrasında elinizde iki kötü seçenek kalıyor: oturup ilerleme çubuğunu izlemek ya da kalkıp gitmek ve yirmi dakika sonra dönüp doksanıncı saniyede hata verdiğini görmek.

Bir satır uzunluğunda üçüncü bir seçenek var.

O tek satır

Echobell'de bir kanal oluşturun, webhook URL'sini kopyalayın ve çalıştırdığınız şeyin ardına ekleyin:

pnpm build; curl -sS -X POST https://hook.echobell.one/t/TOKENINIZ \
  -H 'content-type: application/json' \
  -d '{"title":"derleme bitti","body":"echobell-web"}'

&& değil ; olduğuna dikkat edin. && ile bildirim yalnızca komut başarılı olduğunda gider ki bu tam tersi: hata, hakkında en çok haber almak isteyeceğiniz durumdur.

Çıkış kodunu da gönderin

Yalnızca "bitti" diyen bir bildirim hikâyenin yarısıdır. Durumu da yakalayın:

pnpm build; s=$?; curl -sS -X POST https://hook.echobell.one/t/TOKENINIZ \
  -H 'content-type: application/json' \
  -d "{\"title\":\"derleme $([ $s -eq 0 ] && echo ok || echo HATA)\",\"status\":\"$s\"}"

s=$? komutun hemen ardından gelmeli — araya giren her şey, [ testinin kendisi dahil, $? değerini ezer.

Bunu bir shell fonksiyonuna dönüştürün

Her seferinde bunu yazmak amacı boşa çıkarır. Şunu ~/.zshrc veya ~/.bashrc içine koyun:

notify() {
  "$@"
  local status=$?
  curl -sS -X POST "$ECHOBELL_HOOK" \
    -H 'content-type: application/json' \
    -d "{\"command\":\"$*\",\"status\":\"$status\",\"host\":\"$(hostname -s)\"}" \
    >/dev/null
  return $status
}

ECHOBELL_HOOK'u shell profilinizde tanımlayın — daha iyisi, dotfiles deponuzdan tamamen uzak tutup commit etmediğiniz bir dosyadan export edin. Sonrası:

notify pnpm test
notify cargo build --release
notify python train.py

Sondaki return $status önemlidir: notify'ı şeffaf tutar, böylece notify make && ./deploy.sh beklediğiniz gibi davranmayı sürdürür.

Bu payload ile kanal şablonları şöyle olabilir:

Başlık

{{command}} · {{status}}

Gövde

{{host}} üzerinde

Yalnızca hata verirse çaldır

Çoğu koşu başarılı olur ve bunları duymanıza gerek yoktur. İki kanal bunu temizce çözer: her şey için normal bir kanal ve koşullu bir arama kanalı:

status != "0"

Yataktan kalkmanızı gerektirecek şeyler için notify'ı ikinci kanala yönlendirin; başarılı koşular sessizce geçsin.

Kapanan dizüstünden ve kopan SSH oturumundan sağ çıkmak

Komut SSH üzerinden çalışıyorsa dizüstünü kapatmak shell'i öldürür ve bildirim asla gitmez. İki çözüm:

tmux — komutu bir oturum içinde başlatın ve ayrılın:

tmux new -d -s build 'notify pnpm build'

nohup — tek seferlik iş için:

nohup bash -c 'notify pnpm build' >/dev/null 2>&1 &

Her iki durumda da süreç bağlantınızdan uzun yaşar ve siz bağlı olsanız da olmasanız da bildirim ulaşır.

Yapay zekâ kodlama ajanları

Aynı desen, uzun bir görevi işleyen bir komut satırı ajanını da kapsar:

notify codex exec "ödeme modülünü yeniden düzenle ve testleri çalıştır"

Koşunun ortasında durup insan bekleyen ajanlar için — bir onay, bir izin istemi — tamamlanma bildirimi yanlış araçtır, çünkü koşu tamamlanmamıştır. O durum ajanın kendi hook'unu veya callback'ini gerektirir ve bir push yerine bir aramayı hak eder. Ajan onay kapılarını telefon aramalarına çevirmek tam da bunu ele alır; Claude Code'un Notification hook'u ve agent_needs_input matcher'ı dahil.

İkisini birden kullanın: hook "takıldım" için, shell fonksiyonu "bitirdim" için.

Bildirime konmayacaklar

Komut çıktısı değil. Başarısız bir derlemenin son birkaç satırını gövdeye koymak caziptir. Direnin: derleme kayıtları, sanılandan daha sık token, bağlantı dizgesi ve müşteri verisi barındırır ve bir bildirim gövdesi kilit ekranında biter. Çıkış kodunu gönderin, terminale kendiniz bakın.

Kanal URL'si de değil, hele herkese açık bir dotfiles deposuna. URL'ye sahip olan herkes kanalınıza gönderi yapabilir. Sürüm kontrolüne girmeyen bir dosyada tutun ve başıboş bir bağlantı önizlemesinin onu tetiklememesi için Yalnızca POST'u açın.

Sık sorulan sorular

Neden terminal-notifier ya da notify-send kullanmayayım?

Onlar bildirimi komutu çalıştıran makinede gösterir. Başında oturuyorsanız işinizi görür. Bu kurulumun bütün amacı, oturmadığınız durumdur: uzaktaki bir makine, kapalı bir dizüstü, başka bir oda.

Windows'ta çalışır mı?

Desen çalışır, sözdizimi değişir. PowerShell'de karşılığı Invoke-RestMethod -Method Post -Uri $env:ECHOBELL_HOOK -ContentType application/json -Body $json olur ve $? yerine $LASTEXITCODE kullanılır.

Bildirimi saatimde alabilir miyim?

Alabilirsiniz. Abonelikler eşleştirilmiş bir Apple Watch'a teslim edilir ve açıkçası "derleme bitti" için doğru biçim de budur.

Ya komut 12 saat sürerse?

Bu kurulumda hiçbir şeyin süresi dolmaz — komut döndüğü anda curl çalışır. Kopan bir bağlantının süreci de götürmemesi için tmux altında çalıştırın.

Takım arkadaşlarım aynı bildirimleri alabilir mi?

Alabilir. Kanalı paylaşın; her abone kendi bildirim türünü seçer. GPU'nun yeniden boşaldığını birden fazla kişinin merak ettiği ortak bir eğitim makinesinde işe yarar.

Toparlarsak

Bir shell fonksiyonu, bir kanal ve yalnızca hataları istiyorsanız bir koşul. Kurulumu iki dakika sürer ve ilerleme çubuğu izleyerek geçirdiğiniz yirmi dakikayı size geri verir.

Echobell'i iPhone için indirin ya da Google Play'den alın, sonra kalkıp gitmeye değecek kadar uzun bir şeyde deneyin.


İlgili içerik