ฉันจะทำให้เทอร์มินัล iTerm แจ้งฉันได้อย่างไรเมื่องาน / กระบวนการเสร็จสมบูรณ์


107

การแจ้งเตือนของศูนย์การแจ้งเตือนจะเหมาะอย่างยิ่ง แต่คำรามท่าตีกลับเสียง ฯลฯ ก็ใช้ได้เช่นกัน (หรือถ้าทำได้เฉพาะใน Terminal.app ฉันยินดีที่จะเปลี่ยนกลับ) มีตัวเลือกใดบ้างใน iTerm เพื่อเปิดการแจ้งเตือนหรือเป็นสิ่งที่ฉันควรจะพิมพ์ต่อท้ายคำสั่งในเทอร์มินัล ถ้าเป็นอย่างหลังเป็นไปได้ไหมที่จะเพิ่มการแจ้งเตือนเมื่อกระบวนการเริ่มต้นแล้ว (เช่นถ้าฉันรู้ว่าจะใช้เวลานานกว่าที่ฉันคาดไว้ตอนแรกฉันเดาไม่ถูก)

คำตอบ:


200

แจ้งเกี่ยวกับกระบวนการที่กำลังทำงานอยู่

ทางลัด: Aหรือ:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

ตาหลอน!: iTermจะจับตาดูอย่างแท้จริง (ที่มุมบนขวา) ของเครื่องปลายทางของคุณ เมื่อคำสั่งเสร็จสิ้นมันจะติดต่อกับไฟล์Notification Center.

ทำไม?

เราเปิดใช้คำสั่งแล้ว เราประเมินเวลาที่ต้องทำให้เสร็จต่ำเกินไปเราไม่ต้องการยกเลิกและปฏิเสธที่จะนั่งดู เช่นbrew updateหลังจากนั้นไม่นาน!

ข้อกำหนด

iTerm: การรวมเชลล์:

iTerm2 -> Install Shell Integration

โปรดทราบว่าการรวมจะไม่แสดงการแจ้งเตือนจนกว่าจะรีสตาร์ท iTerm2


11
หลังจากติดตั้งการรวมเชลล์แล้วคุณอาจต้องการไปที่ iTerm2 -> Preferences -> Profiles -> Terminal เลื่อนลงและยกเลิกการเลือก "Show mark indicator" ฉันไม่ชอบการรวมเชลล์นี้ คุณอาจต้องการแก้ไข -> เครื่องหมายและคำอธิบายประกอบ -> การแจ้งเตือน -> โพสต์การแจ้งเตือนหากคุณต้องการให้การแจ้งเตือนระบบปฏิบัติการแทนป๊อปอัปรูปแบบการแจ้งเตือน
Charles L.

@simonhamp ฉันขอแนะนำให้ใช้ทริกเกอร์ ( iterm2.com/documentation-triggers.html ) สำหรับเซสชันที่ถูกฝัง
phirschybar

3
@dwanderson คุณเคยทำงานกับ tmux หรือไม่? สิ่งนี้จะเป็นประโยชน์มาก
Lucas

@Lucas มีบรรทัดในเอกสารที่ระบุว่าการรวมเชลล์ใช้ไม่ได้กับ tmux หรือ screen iterm2.com/documentation-shell-integration.html
Rich Stone

2
ตานี้หลอน !! (╯‵ □ ′) ╯︵┻━┻
WTIFS

42

คุณสามารถเพิ่มสิ่งใดสิ่งหนึ่งต่อไปนี้หลังคำสั่งใดก็ได้โดยมีเครื่องหมายอัฒภาคอยู่ระหว่างคำสั่งและคำสั่ง:

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

หรือถ้าคุณชอบศูนย์การแจ้งเตือน

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

คุณยังสามารถสร้างนามแฝงในโปรไฟล์ของคุณเรียกnotifyและเพิ่มที่ท้ายคำสั่งของคุณ ดังนั้นในโปรไฟล์การเข้าสู่ระบบของคุณ

alias notify="tput bel"

แล้ว

sleep 10; notify

หรือถ้าคุณเริ่มต้นคำสั่งของคุณและมันเป็น "ห้อย" เพียงแค่พิมพ์notifyและกดEnterและมันจะเรียกใช้notifyนามแฝงของคุณในตอนท้ายเมื่อคำสั่งเสร็จสิ้นเช่น

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>

อืมด้วยคำสั่งนี้osascript -e 'display notification "Task finished" with title "Terminal"'ฉันดูเหมือนจะได้รับข้อผิดพลาดนี้2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
truth1ness

ส่วนที่สองของข้อผิดพลาด/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
truth1ness

คุณใช้ระบบเก่ากว่า Mavericks หรือ Yosemite หรือไม่?
Mark Setchell

ไม่โยเซมิตี 10.10.3
truth1ness

โอ้มันแปลก ลองทำอะไรที่ง่ายกว่านี้ได้ไหมosascript -e 'display notification "Hello"'- โดยเฉพาะคัดลอกและวางจากที่นี่
Mark Setchell

33

และคุณสามารถใช้sayคำสั่งได้ตลอดเวลา

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

mvn clean install; say done 

คำสั่งนี้สร้างแอป java spring และใช้เวลานานและคำสั่งนี้จะพูดออกมาdoneหลังจากกระบวนการเสร็จสมบูรณ์


16

iTerm2รองรับการGrowlแจ้งเตือน คุณสามารถเปิดใช้งานได้ในการตั้งค่าโปรไฟล์แต่ละรายการ

เลือกรายละเอียดใน->Preferences… Profilesจากนั้นในแท็บมีตัวเลือกTerminalEnable Growl Notifications

อย่าลืมเปิดใช้งานการiTermแจ้งเตือนในGrowlการตั้งค่า

Triggersหากคุณต้องการที่จะได้รับการแจ้งเตือนสำหรับกระบวนการที่กำหนดคุณอาจจะลองทดสอบกับ คุณกำหนดทริกเกอร์ในAdvancedแท็บในการตั้งค่าโปรไฟล์ ด้วยวิธีนี้คุณอาจกำหนดการแจ้งเตือน Growl ให้กับผลลัพธ์เฉพาะของกระบวนการของคุณ (regexp)

ตัวอย่างเช่นคุณสามารถทำ:

$ mycommand; echo "end-of-my-process"

และเชื่อมต่อทริกเกอร์กับข้อความ "end-of-my-process"

อัปเดต

อ่านเพิ่มเติมเกี่ยวกับทริกเกอร์บนiTerm2.com


ดังนั้นฉันถูกต้องหรือไม่ที่ไม่มีวิธีทั่วโลกในการรับการแจ้งเตือนสำหรับกระบวนการที่เสร็จสิ้นใด ๆ เพราะฉันต้องเรียกใช้สคริปต์หนึ่งครั้งเพื่อให้รู้ว่ามันเขียนอะไรเมื่อสิ้นสุดกระบวนการ (และฉันต้องสร้างหนึ่งสำหรับทุกสคริปต์ที่ฉันเรียกใช้ )? ตัวอย่างเช่นบรรทัดสุดท้ายของกระบวนการ youtube-dl คือ[download] 100% of 40.13MiB in 00:13บรรทัดนี้ซ้ำสำหรับทุกไฟล์ที่เสร็จสิ้น ฉันจะใส่อะไรในสตริง 'end-of-my-process' ของฉัน ฉันสามารถสร้างทริกเกอร์เมื่อพร้อมต์เชลล์เริ่มต้นของฉัน~ >ปรากฏขึ้นอีกครั้งได้หรือไม่
truth1ness

@ truth1ness ฉันไม่คิดว่าจะมีวิธีทั่วไปในการรับทราบเกี่ยวกับกระบวนการที่เสร็จสมบูรณ์ iTermส่งการแจ้งเตือนสำหรับเอาต์พุตเทอร์มินัลใหม่สำหรับการสิ้นสุดของเอาต์พุตเทอร์มินัล สิ่งนี้สามารถใช้ได้กับบางกระบวนการ วิธีการทำงานสำหรับกระบวนการทั้งหมดคือสิ่งที่ฉันแนะนำ ข้อความ "end-of-my-process" อาจเป็นสตริงที่ไม่ซ้ำกันก็ได้ ไม่ซ้ำกันในลักษณะที่กระบวนการของคุณจะไม่พิมพ์ออกมา อาจเป็นข้อความ "end-of-my-process" อย่างแท้จริง คุณต้องป้อนสตริงเดียวกันในข้อกำหนดทริกเกอร์และแนบการแจ้งเตือน ฉันไม่รู้ว่ามันจะใช้ได้กับเชลล์พรอมต์หรือไม่ คุณต้องลองด้วยตัวคุณเอง
baf

อ่าฉันเข้าใจผิดฉันเข้าใจแล้ว ฉันสามารถรับการแจ้งเตือนให้ปรากฏขึ้นพร้อมกับเอาต์พุตเสียงสะท้อน "end-of-my-process" อย่างไรก็ตามฉันยังได้รับการแจ้งเตือนเมื่อฉันออกคำสั่ง echo จริงก่อนที่กระบวนการจะเริ่ม ฉันจะบอกให้ iTerm ละเว้นสตริงได้อย่างไรเมื่อฉันออกคำสั่งจริงและดูเฉพาะสตริงเสียงสะท้อน จากไฟล์วิธีใช้ฉันได้ลองเติมทริกเกอร์ regex ล่วงหน้าด้วย \ 0 ("ค่าทั้งหมดที่ตรงกับนิพจน์ทั่วไป") แต่มันยังคงเรียกใช้ทริกเกอร์สองครั้ง
truth1ness

@ truth1ness มีความคิดสร้างสรรค์เช่นใช้echo "end-of-""my-process" กับเครื่องหมายคำพูดภายใน จะจับคู่ข้อความ "end-of-my-process" เมื่อกระบวนการเสร็จสิ้นเท่านั้น
baf

9

มีเครื่องมือที่เรียกว่าเป็นโอเอสNoti

คุณสามารถติดตั้งได้ด้วยbrew install notiและเริ่มใช้มันเพียงแค่คำขึ้นต้นคำสั่งของคุณด้วยเช่นnotinoti sleep 3


3

คุณยังสามารถใช้terminal-notifierซึ่งใช้การแจ้งเตือนระบบ mac os ในการติดตั้งผ่าน Home brew เพียง:

$ brew install terminal-notifier

จากนั้นหากคุณต้องการแสดงการแจ้งเตือนเมื่องาน / กระบวนการของคุณเสร็จสิ้นให้ใช้สิ่งนี้

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

และการแสดงผลแบบนี้:

ใส่คำอธิบายภาพที่นี่

คุณยังสามารถเปลี่ยนเสียงและไอคอนของการแจ้งเตือน ข้อมูลเพิ่มเติมใน github repo: https://github.com/julienXX/terminal-notifier


1

ติดตั้งการรวมเชลล์ iTerm2

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

ดำเนินการตามคำสั่งของคุณและเชื่อมต่อแอปความสนใจเช่น

./task && ~/.iterm2/it2attention once

มันจะทำให้แอพ iTerm เด้งไอคอนเมื่องานเสร็จสมบูรณ์

คุณยังมีตัวเลือกการให้ความสนใจอื่น ๆ :

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.