명령이 완료 될 때 알림을받는 방법


64

명령 줄에서 완료하는 데 약 20 분이 소요되는 일련의 명령을 실행하고 있습니다. 이 작업이 완료되면 Mac에서 일종의 알림을보고 싶습니다. 터미널이 끝날 때 모니터 할 필요가 없습니다. 이것을 할 수있는 방법이 있습니까?

$ svn update . && ant clean build start && *notify_me_somehow*

편집 :

사용할 수는 xclock있지만 이것은 해킹처럼 보입니다. 전화, 화면 등 어디에서나 알림을 보낼 수있는 것이 이상적입니다.


2
비록 당신이 커맨드 라인에 있지만, 여기에 대한 대답은 실제로 Mac과 관련이 있으며 Unix / Linux와는 관련이 없다고 생각합니다. Growl 및을 사용하고 싶을 수도 있기 때문 grownlnotify입니다.

적어도 내 상자에는 명령이 내장되어 있지 않습니다.

growl.info Growl은 @mattdm 이 참조하는 프로그램입니다.
jsbillings

답변:


58

(svn update . && ant clean build start && say done) || say error


1
이것은 셸 연산자 &&를 사용하여 여러 명령을 연결하고 집합 ||또는 문으로 묶어 오류를 발생 시키는 훌륭한 예입니다 . 실제로 +1
bmike

2
좋은! 그래도 빨리 할 수 ​​있도록 오류 대 성공 정보를 포기하고 내 zsh에 전역 별칭을 추가했습니다 alias -g sd='; say done'. 즉 sd, 명령 에 추가 하기 만하면 알림을 받게됩니다.
wrtsprt

좋은 것. 그리고 지금 나는 연주 할 것이있다
Marco Prins

시도와 완료 및 오류는 항상 말하고 있습니다 :( 예 :(echo alik && echo Orly && say done) || say error
AlikElzin-kilaka

1
매우 편리합니다. 나는 say -v Zarvox근처에있는 모든 사람들이 뛰어 오르는 것에 반향을 일으켰습니다 .이 경고는 약간 덜합니다.
Siddhartha

52

Mac OS 10.8에서는 Growl과 비슷하지만 Mac OS에 내장 된 Notification Center 메시지를 자신에게 보낼 수 있습니다.

" OS X의 명령 행에서 알림 센터에 알림 보내기 "를 확인 하여 명령 행에서 알림을 보낼 수있는 Ruby gem을 설치하는 방법을 확인하십시오. 터미널에서 수행되는 작업에 대한 사실을 걱정하는 일반적인 사용 사례를 단순화하려면 .bash_profile에 별칭을 추가하십시오.

alias notifyDone='terminal-notifier -title "Terminal" -message "Done with task!"'

그런 다음 간단하게 수행 할 수 있습니다.

$ <long-running task> ; notifyDone

장시간 실행되는 작업이 완료되면 클릭 할 때까지 지속되는 멋진 모달 팝업이 나타납니다.

알림 센터 팝업


10
터미널 알림homebrew 를 통해서도 설치할 수 있습니다 : brew install terminal-notifier. 그럼 당신은 쓸 수 있습니다 myCommand && terminal-notifier -message 'finished'. OS X Yosemite (10.10.1)에서 테스트되었습니다.
Pwdr

4
당신은 실행해야 myCommand; terminal-notifier -message 'finished'하는 경우 알림이 표시되지 않습니다, 그렇지 않으면 myCommand실패합니다.
aheuermann

1
멋진 해결책! 그건 그렇고, 이것은 다른 OS X 알림과 같은 소리를 생성하지 않습니다. 그에 대한 해결책이 있습니까?
SexyBeast

1
@Cupidvogel 당신은 say명령을 추가 할 수 있습니다. 예 : my command ; terminal-notifier -message 'finished' ; say finished
Tom Crockett

2
이 질문에 대한 다양한 답변이 더 자세한 내용을 알려줍니다. apple.stackexchange.com/questions/57412/…
Joshua Goldberg

20

Growl을 사용하십시오 .

에서 .dmg파일, 엑스트라를 들어, growlnotify 진있어 보인다. 와 같이 설치하십시오 /usr/local/bin. 그런 다음이 명령을 사용할 수 있습니다

growlnotify --sticky --appIcon <icon> --message <message> -t <title>

팝업을 표시하려면 다음과 같이하십시오.

으르렁


2
나는이 정확한 접근 방식을 거의 사용하지만 Growl을 Prowl로 확장하여 Growl이 내 알림을 iPhone으로 푸시 할 수 있도록합니다.
Ian C.

3
Mountain Lion의 알림 센터는 Growl을 불필요하게 만듭니다 . 이것을 사용하는 방법에 대한 내 답변 을 참조하십시오 .
Tom Crockett 2016 년

16

Mac OS X Lion 10.7부터 터미널에는 다음과 같은 문제를 해결하기위한 새로운 상태 표시기가 있습니다.

탭에서 :

  • 활동 : 터미널에 최근에 출력 된 활동 표시기 (회전 진행 표시기)가 표시됩니다. 이를 통해 현재 통화 중이거나 긴 프로세스를 완료했는지 확인할 수 있습니다. (물론, 잠시 동안 작업을 자동으로 수행 한 후 출력을 시작한 시점을 알 수 있습니다.)

  • 읽지 않음 : 배경 탭에 읽지 않은 새 텍스트를 나타 내기 위해 줄임표 "…"가 표시됩니다. 탭을 선택하면 표시기가 지워집니다.

  • 경고 : "벨"이 표시되어 BEL이 백그라운드 탭이나 백그라운드 창에 쓰여진시기를 나타냅니다. 또한 터미널은 응용 프로그램 아이콘에 빨간색 배지를 표시하여 모든 터미널에서 "읽지 않은"경고 / 벨 수를 나타냅니다. 터미널 자체가 백그라운드에 있으면 벨을 연주 할 때 Dock 아이콘도 튀어 오릅니다.

최소화 된 창 도크 아이콘에서 :

  • 활동 : 활동은 포 그라운드 프로세스의 이름을 표시하여 표시됩니다.

  • 읽지 않음 : 읽지 않은 텍스트는 줄임표로 표시됩니다.

  • 최소화 된 터미널 창은 Dock 아이콘에 라이브 컨텐츠를 표시합니다. 찾고있는 출력을 식별 할 수있는 경우 (예 : "상단"디스플레이는 작은 크기에서도 상당히 쉽게 인식 할 수있는 경우) 활동이 있는지 여부를 확인하거나 터미널에서 수행중인 작업을 확인하는 데 사용할 수 있습니다. Dock 배율이 켜져 있거나 큰 Dock을위한 공간이있을 때 특히 유용합니다.

또한 터미널에 무언가를 표시하여주의를 끌 수 있습니다 (최소 창에서도 볼 수 있음). 예를 들면 다음과 같습니다.

  • 큰 별표를 표시하십시오. banner \*

  • 디스플레이를 반전시킵니다. printf '\e[?5h'

  • 디스플레이를 빨간색으로 페인트하십시오. tput setab 1; tput clear

  • 화면을 깜박이는 루프에 앉아 : while true; do printf '\e[?5h'; sleep 1; printf '\e[?5l'; sleep 1; done

창 조작을위한 이스케이프 코드도 ​​있습니다 (이동, 크기 설정, 확대 / 축소, 최소화 등). 예를 들어 터미널 창을 확대 / 축소 할 수 있습니다.

printf '\e[9;1t'

자세한 내용은 http://invisible-island.net/xterm/ctlseqs/ctlseqs.html의 "창 조작" 을 참조하십시오.

다른 방법은 AppleScript를 사용하여 별도의 창에 경고를 표시하는 것입니다.

osascript -e 'tell app "System Events" to display alert "Build Completed" message "The checkout and build have completed."'

tput 및 escape sequence의 탁월한 사용-제목 표시 줄에 스크롤 메시지를 제외한 모든 것이 있습니다!
bmike

12

나는 질문에 늦었다는 것을 알고 있지만 도움이 될만한 누락 된 부분이 있다고 생각합니다. 나는 그것이 깔끔하지만 터미널이 당신과 대화하는 것이 정확하게 기능하지는 않는다는 것을 알았습니다. 더 좋은 것은 다음과 같이 더 미묘한 것입니다.

http://i.stack.imgur.com/FaZmF.png

Chris가 지적했듯이 Lion은 BEL이 발생했을 때 알림 배지를 거의 추가하지 않았습니다. 다음 명령으로 이것을 스스로 던질 수 있습니다.

tput bel

따라서 백그라운드에서 작업을 수행하고 완료되었을 때 알림을 받으려면 다음과 같이 시도하십시오.

ping -c 5 www.google.com && tput bel &

이것은 ping 명령을 백그라운드 작업으로 실행하고 (매달리고 이것을 달성) 완료되면 간단한 경고를 발생시킵니다. 역사적으로 BEL은 [끔찍한] 하드웨어 경고음을내는 데 사용되었지만 Lion은이를 "잘못된 명령"사운드 효과, 알림 배지 및 터미널 아이콘이 도크에서 두 번 튀는 것으로 대체했습니다.


1
printf '\a'와 같습니다 tput bel. 경고를 일으킨 탭이 현재 활성화되어 있으면 터미널은 Dock 아이콘을 튕기 지 않습니다.
Lri

5

이 답변에는 두 가지가 있습니다.

  • 알림을 위해 afplay사운드 파일을 재생하는 을 사용하는 옵션입니다 .
  • 알림과 함께 종료 상태보고 하기위한 도구 .

나는이 스크립트를 가지고있다 ~/bin/donebeep:

#!/bin/bash
if [ "$@" = 0 ]; then
  afplay -v 2 /System/Library/Sounds/Blow.aiff &
else
  afplay -v 2 /System/Library/Sounds/Sosumi.aiff &
fi

이것은 인수가 0인지 여부에 따라 다른 소리를 재생합니다. 그런 다음 별칭이 있습니다.

alias donebeep='(savestatus=$?; ~/bin/donebeep $savestatus "$@"; exit $savestatus)'

(같은 이름을 가진 것은 관련이 없으며 아마도 나쁜 생각 일 것입니다.)

귀하의 예에서 사용하려면 svn update . && ant clean build start; donebeep. 내가 아니라 실패와 성공에 대해 알릴 수 있도록 내가 ;아닌을 사용 &&하고 있습니다.

전에 내가 대해 배웠다afplay , 내가 사용 say하는 대신 메시지를 말할 수 있습니다. donebeep이 스크립트 의 역할은 다음과 같습니다.

#!/bin/bash
say -v Bruce "Done $(basename "$(pwd)"), $@." &

이 스크립트는 두 개의 서로 다른 메시지가 아닌 종료 코드를 직접 말합니다. 또한 현재 디렉토리의 이름에 대해 언급하고 (어떤 작업이 수행되었는지를 명확하게하는 데 도움이 됨) 매개 변수를 별명에 전달하여 말할 추가 텍스트를 제공 할 수 있습니다 (그러면 별명이 "$@"있는 이유). &프롬프트가 표시되기 전에 음성이 끝날 때까지 기다릴 필요가 없도록 후행에 유의하십시오 .


매뉴얼 페이지afplay 가 불완전합니다. afplay -h모든 옵션을 나열합니다.

Usage:
afplay [option...] audio_file

Options: (may appear before or after arguments)
  {-v | --volume} VOLUME
    set the volume for playback of the file
  {-h | --help}
    print help
  { --leaks}
    run leaks analysis  {-t | --time} TIME
    play for TIME seconds
  {-r | --rate} RATE
    play at playback rate
  {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
  {-d | --debug}
    debug print output

4

알림에 build in say 명령을 사용할 수도 있습니다 (예 : "ant : build : done"). 터미널에서 사람의 말을 참조하십시오.



1

나는 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)
  • 프로세스가 종료 될 때 알림을 보내는 데 사용됩니다 (위의 자동 지원이 아님).
  • 수동으로 알림 보내기 (스크립트에서 사용하기에 좋습니다!)

1

iTerm2에는 알림을받는 내장 메커니즘이 있지만 쉘 통합 을 설치해야합니다 .

장기 실행 명령을 시작할 때
편집> 표시 및 주석> 경고> 다음 표시에서 경고 ( ⌥Option+ ⌘Command+ A)를 선택하십시오.

명령 프롬프트가 표시되면 다음 중에서 선택할 수 있습니다.

  • 모달 경고 상자 표시
  • 게시물 알림 (예 : 스크린 샷)


0

우분투는 ~ / .bashrc에 다음과 같은 별칭을 제공합니다.

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

이를 통해 다음과 같은 작업을 수행 할 수 있습니다.

make; alert
sleep 10; alert

아마도 notify-sendMac OSX에 해당하는 것이 있습니까? Mac과 Ubuntu에서 비슷한 팝업 창을 보았습니다.


당신은 애플 사이트에 있습니다. 이에 대한 답을 얻으려면 notify-sendMac OS X 을 얻는 방법을 설명하십시오.
Daniel Beck

4
나는 이것이 부적절하다는 것에 동의하지만 실제로 이것이 도움이된다는 것을 알았습니다. Google 에서이 질문에 왔으며 원래 질문은 Mac과 관련이 없습니다. 원래 포스터와 마찬가지로, 시간이 오래 걸리는 명령을 실행할 때 터미널을 모니터링 할 필요가 없습니다. 방금 우분투를 사용하고 있습니다 : /
allyourcode

0

소리와 모달 창에 대한 나의 문제는 그들이 어디에서 왔는지 알 수 없다는 것입니다. 나는 현재 많은 공간, 때로는 20 개 이상의 터미널 창으로 작업합니다.

내 솔루션은 유닉스 측으로 이식 가능하며 ansi escape 시퀀스를 지원하는 모든 항목에서 작동해야합니다. 이 솔루션은 Snow Leopard와 함께 작동하며 더 오래된 버전의 터미널에서도 작동합니다.

.bash_profile의 한 줄

function watch { $* ; echo -n -e "\033[41m" ;  echo $* DONE ;  date ;  echo -n -e "\033[0m" ; }

세분화 :

$* expands to the original command I want to watch.
first escape sequence changes background color to red
echo repeats the command (with red background, the word DONE.
Running Date tells you when it finished.
last escape resets the terminal to what it was.

빨간색이 마음에 들지 않으면 Google Ascii 이스케이프 코드 배경색입니다. 이렇게하면 전체 화면이 빨간색으로 바뀌지 않고 명령이 완료된 후 출력되는 내용 만 나타납니다.


0

나는 어떤이 해결하는 스크립트를 만들어 여기를 . 이를 위해 별도의 소프트웨어가 필요하지 않습니다. 설치 :
brew install akashaggarwal7/tools/tsay
사용법 :
sleep 5; tsay

기고하십시오!


공감 사유?
Akash Agarwal

0

여기 내 bash 함수가 있습니다 ( ~/.bashrc또는 어디에나 넣으십시오 ~/.zshrc:

watch(){
  cmd=$@ # Somehow interpolate $@ directly doesn't work.
  $@ && say 'Watch Completed!' && osascript -e "display notification \"Completed: $cmd\" with title \"Watch Alert\""
}

그것을 사용하려면 : watch echo 'hi there'

https://apple.stackexchange.com/a/115373/9622에 설명 된대로 알림 소리를 사용자 정의 할 수도 있습니다.


0

나는 항상 그런 종류의 일을합니다. 내 명령 줄은 다음과 같습니다

$ rm Gemfile.lock && bin/setup && bundle install --binstubs && say "All"; say "done"

는 IF bin/setup와이 bundle install성공적으로 완료 명령, 나는 시스템 / 받아쓰기 음성은 "모든 일"말을 듣게 될 것입니다. 처음 두 가지 오류 중 하나가 발생하면 &&체인을 따르지 않으며 "들음"만 들립니다.


0

내장 osascript명령을 사용하여 알림을 표시하는 Apple Script를 실행할 수 있습니다 ( 예 :

osascript -e 'display notification "Command done" with title "Your title here"'

간단한 세미콜론으로 묶을 수 있습니다. 예 :

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