작업 / 프로세스가 종료 될 때 알림을 어떻게 트리거 할 수 있습니까?


86

내가 일하는 장소에는 명령을 실행하는 데 시간이 오래 걸립니다.

명령 실행이 끝났을 때 알려주는 데 사용할 수있는 명령 / 유틸리티가 있습니까? 팝업 창이거나 약간의 소리 일 수 있습니다.


1
@ slhck의 받아 들인 대답은 멋지다 fg;say "Job finished". 그러나 ... 더 자동화 할 수있는 방법이 있습니까? 즉, 벨을 울리거나 분과 같은 임계 값을 초과하는 작업이 완료된 후에 알릴 수 있습니까? 마지막 명령의 경과 시간 인 bash와 같은 쉘 변수가 있습니까?
Krazy Glew

... 2 시간 후 stackoverflow.com/questions/1862510 / ... ... '(($ timer_show> $ {LONG_RUNTIME : -300})) & timer_stop에서'장기 작업 완료 '를 입력하십시오 ... 다음으로, emacs의 컴파일 명령에 추가하고 ... 내 Pebble 시계에 알리십시오 (전화 알림이 싫습니다)
Krazy Glew

답변:


119

일반적으로 명령을 실행 하기 전에 이를 알고 있다면 다음 과 같이 시작할 수 있습니다.

command; command-after &

이것은를 실행 command-after 한 후 이전 명령 (관계없이 종료 코드의) 종료되었습니다. 은 &배경에서 시작됩니다.

성공 또는 실패 종료에 관심이있는 경우 각각 다음을 사용하십시오.

command && command-after-only-if-success &
command || command-after-only-if-fail &

명령이 이미 시작된 경우 작업 제어를 사용 하여 명령 을 일시 중단 한 다음 fg알림 과 연결 하여 포 그라운드로 되돌릴 수 있습니다.

command
# enter Ctrl-z
fg ; command-after

이제 ...이 후에 수행하려는 작업은 환경에 따라 다릅니다.

  • 모든 시스템 , 당신이 할 수있는 "링"터미널 종 . 실제 시스템에 따라 (BSD vs. GNU Linux 등) 실제로 작동하지만 tput bel해야합니다. 그래도 지금은 확실하게 테스트 할 수 없었습니다. 자세한 내용을 보려면 "링 벨"을 검색하십시오.

  • 맥 OS X , 당신은 찾기 대화 상자를 팝업 애플 스크립트를 사용할 수 있습니다 :

    osascript -e 'tell Application "Finder" to display dialog "Job finished" '
    

    당신은 당신에게 뭔가를 말할 수 있습니다 :

    say "Job finished"
    

    또는 Mountain Lion의 알림 시스템을 사용할 수 있습니다.

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • 에서 GNOME , zenity명령 줄에서라는 GTK 대화 상자를 표시 할 수 있습니다. 이 스택 오버플로 질문 : linux의 bash 스크립트에서 메시지 상자 표시를 참조하십시오 . 선호하는 패키지 관리자를 통해 설치할 수 있습니다.

    zenity --info --text="Job finished"
    
  • 일부 배포판에는가있을 수 있습니다 xmessage. GTK 환경을 위해 특별히 gxmessage있습니다.

  • UbuntuGNOME 과 같은 데스크탑 알림 사양 을 구현하는 데스크탑 환경 에는 (일부 )로 트리거 할 수있는 알림 시스템이 있습니다 .notify-sendlibnotify

    notify-send "Job finished!"
    
  • KDEkdialog예를 들어 다음을 사용합니다 .

    kdialog --passivepopup 'Job finished'
    

어떤 명령을 사용했는지 알려주세요! 다른 옵션도 추가했습니다.
slhck

notify-send 및 xmessage를 사용하고 있습니다. 둘 다 흥미로운 것 같습니다! - 여기에 내가 찾고 다음 일이 superuser.com/questions/345463/...은
Utkarsh 신하

2
Mac OS X에서는 명령 줄 유틸리티 "say"를 사용할 수도 있습니다. 사용할 수있는 음성도 많이 있습니다. "say -h"를 확인하십시오.;)
trinth

1
"명령 이후"를 비동기 적으로 실행해야한다고 제안하는 이유는 무엇입니까? 당신은 말하는 것을 의미 했습니까 (command; command-after) &?
G-Man

이 솔루션은 Konsole 사용자를위한 것으로, 명령이 완료 될 때까지 자세하게 표시되거나 프롬프트가 리턴되는 시점까지 완료되지 않을 때까지 완전 자동 (출력 없음) 명령에 의존하므로 완벽한 솔루션이 아닙니다. 그러나 이것은 내가 도움을 구할 때 필요한 것입니다. 알림을 팝업하거나 소리를 재생하는 등 Konsole을 구성 할 수 있습니다. 그런 다음 쉘 모니터링을 켜야합니다. 명령이 완료 될 때까지 많은 것을 출력하면 침묵을 모니터하고, 아무것도 출력하지 않으면 쉘이 리턴합니다.
MrMas



5

소리 알림을 받으려면을 사용할 수 있습니다 spd-say "Some text". 예:

some-command; spd-say "Yo"

어떤 OS? Mac 또는 Ubuntu에서는 보이지 않습니다
Edward Falk

@EdwardFalk 우분투를 사용하고 있습니다
milkovsky

좋아, 나는 꽤 오래된 버전을 사용하고 있으므로 아마도 최신 버전 일 것입니다.
Edward Falk

1
텍스트 음성 변환 응용 프로그램입니다. 를 통해 설치할 수 있습니다 sudo apt-get install speech-dispatcher. 또는 대안 askubuntu.com/questions/501910/…
milkovsky

아, 기본적으로 설치되지 않습니까? 나는 그것에 대해 생각 했어야했다. 링크 주셔서 감사합니다.
Edward Falk

4

Cygwin의 데스크탑 알림에 notifu 를 사용하기 시작했습니다 . Windows 용 명령 줄 알림 앱입니다.

예:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."

4

나는 ntfy이 목적을 위해 정확히 썼다 . 그것은이다 크로스 플랫폼 할 수 있습니다 자동으로 긴 실행 명령이 완료 될 때 알림을 보낼 수 있습니다.

파이썬 pip(대부분의 Linux 배포판과 MacOS에 있음)이있는 경우이를 설치하고 자동 알림을 활성화하는 방법은 다음과 같습니다.

$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell

http://ntfy.rtfd.io 에서 확인하십시오

그 외에도 다음을 수행 할 수 있습니다.

  • 터미널이 포 그라운드에있을 때 자동 알림을 억제합니다 (X11, iTerm2 및 Terminal.app가 기본적으로 지원 및 활성화 됨)
  • 클라우드 기반 알림 전송 (Pushover, Pushbullet 및 XMPP)
  • 프로세스가 종료 될 때 알림을 보내는 데 사용됩니다 (위의 자동 지원이 아님).
  • 수동으로 알림 보내기 (스크립트에서 사용하기에 좋습니다!)

너에게 좋다. 이것은 실제로 가장 유용한 답변입니다.
Adam Bittlingmayer

동의한다. 이를 사용하여 바탕 화면에 알림을 표시하고 동시에 알림을 휴대폰으로 푸시합니다.
Michael

3

Linux의 경우 매번 알림을 위해 명령을 입력하지 않아도 자동으로 수행하는 멋진 트릭이 있습니다.

먼저 자동 키를 설치하십시오. 이를 통해 다양한 키 입력에 대한 작업을 정의 할 수 있습니다.

sudo apt-get install autokey-gtk

이제 자동 키에서 새 문구를 정의하고 단축키를 Alt + Enter로 지정하십시오. 이 문구를 추가하십시오 :

; notify-send "Job finished!" &
  #

첫 번째 줄 다음에 새 줄이 중요합니다.

또한 창 필터를 추가하십시오. 구 아나 터미널을 사용합니다. 다른 터미널을 사용하십시오.

.*(guake)|(Terminal).*

끝났습니다 !!

이제 명령에 대한 알림을 받아야 할 때마다 Enter / Return 대신 Alt + Enter를 사용하여 명령을 실행하십시오.

출처 : http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html


3

다른 답변은 이미 완료된 작업에 대한 알림을받는 대부분의 방법을 다루었지만 다음과 같은 형식으로 질문 한 후 2 센트를주고 싶습니다.

내가 일하는 장소에는 명령을 실행하는 데 시간이 오래 걸립니다.

나는 같은 문제를 가지고있다. 때로는 15 분 동안 무언가가 실행될 수 있습니다.

내 .bashrc에 다음 기능이 있습니다.

# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
    curl -s -F "token=PUSHOVER_TOKEN" \
    -F "user=PUSHOVER_USER" \
    -F "title=terminal" \
    -F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}

휴대 전화로 알림을 푸시하기 위해 푸시 오버 앱을 사용합니다. 이렇게하면 점심을 먹거나 회의에 참석할 수 있으며 퇴근 전에 컴퓨터에서 시작한 작업에 대한 알림을받을 수 있습니다.

다음과 같은 방식으로 사용합니다.

command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("

따라서 명령이 올바른 종료 코드를 반환하면 첫 번째 푸시가 실행됩니다. 오류가 발생하면 두 번째 오류가 실행됩니다.

종종 Pushover에서 사용자를 생성하고 https://pushover.net/ 에서 알림을 보내려면 앱을 등록해야합니다.

이것이 도움이 되었기를 바랍니다!


"푸시 오버"는 "푸시 오버"앱이 설치된 전화기로 알림을 보내는 웹 서비스입니까?
Edward Falk

1
최신 웹 브라우저전화, 컴퓨터 및 모든 것에 알림을 보내는 웹 서비스입니다 . 따라서 PC와 휴대 전화에서 푸시 오버를 열어 모든 장치에 알릴 수 있습니다. 깔끔한가요? :-)
Thatkookooguy

1

대화식 쉘로 csh 또는 tcsh를 사용하는 경우 다음 notify명령을 사용할 수 있습니다 .

% long-running-command &
[1] 14431
% notify %1
% 
(later, when the command finishes)
[1]    Done                          long-running-command

set -b또는을 사용 하여 bash에서 비슷한 효과를 얻을 수 있습니다 set -o notify.

메시지를 인쇄하는 것만으로는 요구 사항을 충족하지 못할 수 있습니다. 창을 열거 나 종을 울리도록 구성 할 수 있다고 생각하지 않습니다.


작업이 완료되었는지 확인하기 위해 쉘을 보지 않으려 고합니다. 그래도 고마워!
Utkarsh Sinha


1

당신이 사용하는 경우 npm다음 노드 알리미 제공하는 크로스 플랫폼 솔루션을 .

notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "

시사

  • 리눅스 KDE

리눅스 KDE

  • 윈도우

윈도우

  • 맥 OS

맥

  • 으르렁

으르렁


1

이 스레드가 몇 년 전에 나타났습니다. 내 솔루션은 본질적으로 slhck와 동일하지만 스크립트를 작성했습니다. 나는 항상 그것을 사용합니다. 공유하려면 여기에 게시하십시오.

#!/bin/bash

msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi

echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
  unset WINDOWID
  exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
  exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
  if ! $quiet; then say "done" &; fi
  osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
  echo $msg
fi

간단한 설명 : 문자열 "\x1b]0;$msg\a"은 메시지가 실행 된 창의 제목 표시 줄에 메시지를 넣는 ANSI 이스케이프 시퀀스입니다. 메시지가 나온 창을 확인할 수있는 경우가 종종 있습니다.


1

그래서 이것은 상당히 늦었지만 시스템을 사용 하여이 작업을 시작했습니다. 나중에 전달 된 명령을 실행하는 bash 스크립트가 있습니다.

http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/

#!/bin/bash


# file location : /usr/bin/n

set +e


# $@ executes whatever command is typed after the filename

$@


notify-send "Task Completed"

그리고 난 단순히 n 앞에

n bundle install
n npm install

0

또 다른 가능성은 alertWorks on Linux 를 사용하는 것입니다 .

>any-command; alert

이미지와 같이 알림을 제공합니다. 경고 알림


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.