---
title: "Terminaldeki uzun bir komut bitince haber alın"
description: "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."
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - terminal
  - shell
  - derleme bildirimleri
  - yapay zekâ kodlama ajanları
  - webhook bildirimleri
---

# Terminaldeki uzun bir komut bitince haber alın

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:

```bash
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:

```bash
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:

```bash
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ı:

```bash
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:

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

**nohup** — tek seferlik iş için:

```bash
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:

```bash
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](/tr/blog/ai-agent-human-in-the-loop-alerts) 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](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-notify-when-terminal-command-finishes-tr&mt=8) ya da [Google Play'den alın](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid), sonra kalkıp gitmeye değecek kadar uzun bir şeyde deneyin.

---

## İlgili içerik

- [Ajan onay kapılarını telefon aramalarına çevirmek](/tr/blog/ai-agent-human-in-the-loop-alerts)
- [Bir GitHub Actions hatasını asla kaçırmayın](/tr/blog/github-actions-notifications)
- [Cron işi hata uyarıları](/tr/blog/cron-job-failure-alerts)
- [Webhook tetikleyici belgeleri](/tr/docs/webhook)
- [Kanal koşulları referansı](/tr/docs/conditions)
