วิธีรับการแจ้งเตือนเมื่อคำสั่งของฉันเสร็จสิ้น


64

ฉันใช้ชุดคำสั่งบนบรรทัดคำสั่งซึ่งใช้เวลาประมาณยี่สิบนาทีจึงจะเสร็จสมบูรณ์ ฉันต้องการเห็นการแจ้งเตือนบางอย่างบน Mac ของฉันเมื่อสิ่งเหล่านี้เสร็จสิ้นดังนั้นฉันไม่จำเป็นต้องตรวจสอบเทอร์มินัลเมื่อมันเสร็จสิ้น มีวิธีทำเช่นนี้หรือไม่?

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

แก้ไข :

ฉันสามารถใช้xclockแต่ดูเหมือนว่าแฮ็ค เป็นการดีที่ฉันสามารถส่งการแจ้งเตือนได้ทุกที่เช่นโทรศัพท์หน้าจอ ฯลฯ


2
แม้ว่าคุณจะอยู่ที่บรรทัดคำสั่ง แต่ฉันคิดว่าคำตอบที่นี่เป็นจริงสำหรับ Mac โดยเฉพาะและไม่เกี่ยวข้องกับ Unix / Linux grownlnotifyนั่นเป็นเพราะฉันคิดว่าคุณอาจต้องการที่จะใช้และคำราม

นั่นไม่ใช่คำสั่ง build in อย่างน้อยก็ในกล่องของฉัน

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

ทำได้ดีนี่. และตอนนี้ฉันมีบางอย่างที่จะเล่นกับ
มาร์โกพรินส์

พยายามและทำทั้งสองอย่างและมีข้อผิดพลาดถูกกล่าวเสมอ :( ตัวอย่าง:(echo alik && echo Orly && say done) || say error
AlikElzin-kilaka

1
มีประโยชน์มาก ฉันได้รับการสะท้อนsay -v Zarvoxซึ่งทำให้ทุกคนในบริเวณใกล้เคียงกระโดดนี่คือการแจ้งเตือนที่น่ากลัวน้อยกว่าเล็กน้อย
Siddhartha

52

ใน Mac OS 10.8 คุณสามารถส่งข้อความศูนย์การแจ้งเตือนด้วยตัวเอง (คล้ายกับ Growl แต่อยู่ใน Mac OS)

ลองใช้ " ส่งการแจ้งเตือนไปยังศูนย์การแจ้งเตือนจาก Command Line ใน 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

ใช้คำราม

ใน.dmgไฟล์ให้มองหาสิ่งพิเศษมีไบนารีคำราม /usr/local/binติดตั้งบางอย่างเช่นใน จากนั้นคุณสามารถใช้คำสั่งนี้

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

เพื่อแสดงป๊อปอัปเช่นนั้น:

การคำราม


2
ฉันใช้วิธีนี้เกือบจะแน่นอน แต่ฉันขยายคำรามด้วยProwlเพื่อให้คำรามสามารถส่งการแจ้งเตือนไปยัง iPhone ของฉัน
Ian C.

3
ศูนย์การแจ้งเตือนของ Mountain Lion ทำให้ Growl ไม่จำเป็น ... ดูคำตอบของฉันสำหรับวิธีการใช้สิ่งนี้
Tom Crockett

16

ในฐานะของ Mac OS X Lion 10.7 เทอร์มินัลมีตัวบ่งชี้สถานะใหม่เพื่อช่วยแก้ไขปัญหาดังนี้:

ในแท็บ:

  • กิจกรรม: ตัวบ่งชี้กิจกรรม (ตัวบ่งชี้ความคืบหน้าการหมุน) จะปรากฏขึ้นเมื่อมีการส่งออกไปยังเทอร์มินัลล่าสุด สิ่งนี้ช่วยให้คุณเห็นว่ากำลังยุ่งหรือเสร็จสิ้นกระบวนการที่ยาวนาน (หรือแน่นอนคุณสามารถใช้มันเพื่อบอกว่าเมื่อใดที่มันได้เริ่มผลิตออกมาหลังจากทำงานเงียบ ๆ ไปซักพัก)

  • ยังไม่ได้อ่าน: เครื่องหมายจุดไข่ปลา "... " จะปรากฏขึ้นเพื่อระบุข้อความใหม่ที่ยังไม่ได้อ่านในแท็บพื้นหลัง เมื่อคุณเลือกแท็บตัวบ่งชี้จะถูกล้าง

  • การแจ้งเตือน: "ระฆัง" จะปรากฏขึ้นเพื่อระบุว่าเมื่อ BEL ได้ถูกเขียนไปยังแท็บพื้นหลังหรือหน้าต่างพื้นหลัง นอกจากนี้เทอร์มินัลจะแสดงตราสัญลักษณ์สีแดงบนไอคอนแอปพลิเคชันซึ่งระบุจำนวนการแจ้งเตือน / ระฆัง "ยังไม่ได้อ่าน" ในเทอร์มินัลทั้งหมด หากเทอร์มินัลอยู่ในพื้นหลังก็จะกระดอนไอคอน Dock ของมันเมื่อเล่นระฆัง

ในไอคอน Dock ของหน้าต่างที่ย่อเล็กสุด:

  • กิจกรรม: กิจกรรมถูกระบุโดยแสดงชื่อของกระบวนการพื้นหน้า

  • ยังไม่ได้อ่าน: ข้อความที่ยังไม่ได้อ่านถูกระบุด้วยจุดไข่ปลา

  • หน้าต่างเทอร์มินัลที่เล็กสุดแสดงเนื้อหาสดในไอคอน Dock สิ่งนี้สามารถใช้เพื่อดูว่ามีกิจกรรมหรือแม้กระทั่งการพิจารณาว่าเทอร์มินัลกำลังทำอะไรถ้าผลลัพธ์ที่คุณกำลังมองหานั้นสามารถระบุตัวตนได้ (เช่นจอแสดงผล "top" นั้นค่อนข้างจดจำได้ง่ายแม้ในขนาดเล็ก) สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อเปิดใช้งานการขยาย 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 sequences - คุณมีทุกอย่างยกเว้นข้อความเลื่อนในแถบหัวเรื่อง!
bmike

12

ฉันรู้ว่าฉันมาสายคำถาม แต่ฉันคิดว่ามีชิ้นส่วนที่ขาดหายไปเล็กน้อยซึ่งอาจเป็นประโยชน์ ฉันพบว่าในขณะที่มันเรียบร้อยการให้เครื่องของคุณพูดคุยกับคุณไม่ได้ทำงานอย่างแน่นอน สิ่งที่ดีกว่าคือสิ่งที่ละเอียดอ่อนกว่าเช่นนี้:

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

ตามที่ Chris ชี้ให้เห็น Lion ได้เพิ่มป้ายแจ้งเตือนเล็กน้อยเมื่อมีการโยน BEL คุณสามารถโยนมันด้วยตัวคุณเองด้วยคำสั่ง:

tput bel

ดังนั้นหากคุณกำลังทำงานอยู่เบื้องหลังและต้องการการแจ้งเตือนเมื่อเสร็จสิ้นคุณสามารถลองดังนี้:

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

สิ่งนี้จะรันคำสั่ง ping เป็นงานพื้นหลัง (การแฮงค์ & ทำสิ่งนี้ให้สำเร็จ) และปล่อยให้การแจ้งเตือนง่าย ๆ เมื่อมันเสร็จสิ้น ในอดีตเคยมีการใช้เบลเพื่อทำเสียงบี๊บฮาร์ดแวร์ [น่ากลัว] อย่างไรก็ตามไลออนได้แทนที่อย่างมีรสนิยมด้วยเอฟเฟกต์ "คำสั่งที่ไม่ถูกต้อง" ป้ายแสดงการแจ้งเตือนและไอคอนเทอร์มินัลกระเด้งสองครั้ง


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เพื่อวัตถุประสงค์นี้ มันเป็นข้ามแพลตฟอร์มและสามารถส่งการแจ้งเตือนโดยอัตโนมัติเมื่อคำสั่งที่ใช้เวลานานเสร็จสิ้น

หากคุณมี Python pip(ส่วนใหญ่ Linux distros และ 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)

เมื่อพรอมต์คำสั่งกลับมาคุณสามารถเลือกระหว่าง:

  • แสดง Modal Alert Box
  • โพสต์การแจ้งเตือน (ภาพตัวอย่าง)


0

Ubuntu จัดส่งนามแฝงต่อไปนี้ใน ~ / .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-sendใน Mac OSX หรือ ฉันเห็นป๊อปอัป Windows ที่คล้ายกันทั้งใน Mac และ Ubuntu


คุณอยู่ในไซต์ Apple เพื่อให้คำตอบนี้โปรดอธิบายวิธีการnotify-sendใช้ Mac OS X
Daniel Beck

4
ฉันยอมรับว่านี่เป็นสิ่งที่ไม่เหมาะสม แต่ฉันพบว่ามีประโยชน์ ฉันมาถึงคำถามนี้จาก Google และคำถามเดิมของฉันไม่ใช่เฉพาะ Mac เช่นเดียวกับโปสเตอร์ต้นฉบับฉันต้องการวิธีที่จะไม่ต้องตรวจสอบเครื่องของฉันเมื่อใช้คำสั่งที่ใช้เวลานาน ฉันเพิ่งจะใช้ Ubuntu: /
allyourcode

0

ปัญหาของฉันเกี่ยวกับเสียงและหน้าต่าง modal คือฉันไม่สามารถบอกได้ว่ามาจากไหน ขณะนี้ฉันทำงานกับที่ว่างจำนวนหนึ่งและบางครั้งมีหน้าต่างเทอร์มินัลมากกว่า 20 เครื่อง

โซลูชันของฉันสามารถพกพาไปยังฝั่ง unix ได้และควรทำงานกับทุกสิ่งที่สนับสนุนลำดับการหลีกเลี่ยง วิธีนี้ใช้ได้กับ 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

นี่คือฟังก์ชั่นทุบตีของฉัน (เพียงวางไว้ที่ใดก็ได้ในของคุณ~/.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"

หากคำสั่ง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.