การแจ้งเตือนคำรามสำหรับการทำงานของเชลล์ให้สำเร็จ


12

(เฉพาะ OSX)

ฉันเช่นเดียวกับคนอื่น ๆ นอกเหนือจากตัวฉันมักจะพบว่าตัวเองเตะกระบวนการในเปลือกที่ใช้เวลาหนึ่งหรือสองนาทีให้เสร็จสมบูรณ์ (ตัวอย่าง svn ขนาดใหญ่กระทำ) ในช่วงเวลานั้นฉันมักจะแท็บ alt และรีเฟรช reddit / slashdot / wikipedia / อะไรก็ตาม มันจะเป็นการดีถ้ามีบางสิ่งที่ตั้งค่าไว้ซึ่งโพสต์การแจ้งเตือนคำรามเมื่อกระบวนการเชลล์จบลง

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

ใครมีบางอย่างเช่นการตั้งค่านี้


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

@mankoff: คุณสามารถกำหนดการตั้งค่าการgrowlnotifyแจ้งเตือนของแอปพลิเคชันGrowl.prefPaneเพื่อรวมเสียงการแจ้งเตือนด้วยเสียง มันไม่ได้ แต่อาจมีการเปลี่ยนแปลงขึ้นอยู่กับคำสั่งที่คุณดำเนินการเช่นsayจะเป็น แต่มันน่าขนลุกน้อยกว่า
Daniel Beck

คำตอบ:


11

คุณสามารถติดตั้งgrowlnotifyเพื่อทำสิ่งนี้

$ ./some_program && growlnotify Title -m Message

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


เพื่อให้การใช้คำนำหน้าคำบรรยายสำหรับกรณีการใช้งานของคุณง่ายขึ้นให้แก้ไข~/bash_profileและเพิ่มสิ่งต่อไปนี้:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

ตอนนี้คุณสามารถทำได้long your_command(คล้ายกับsudo) Ctrl-Aวางตำแหน่งเคอร์เซอร์ที่จุดเริ่มต้นของบรรทัดถ้าคุณ (เช่นฉัน) พิมพ์คำสั่งจริงก่อนเสมอและต้องเพิ่มคำนำหน้าในภายหลัง

bash-fu ของฉันน่าเสียดายที่ไม่สามารถเพิ่มคำสั่งในgrowlnotifyข้อความได้


ต่อความคิดเห็นของ @ mankoff ต่อคำตอบนี้:

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

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

gn svnใช้เป็น


2
คุณไม่จำเป็นต้องคิดถึงมันก่อนคำสั่ง หากในขณะที่กำลังทำงานคุณรู้ว่าคุณต้องการได้รับการแจ้งเตือนเมื่อเสร็จสิ้นให้พิมพ์ "gn foo" (หรือ "พูดเสร็จ" สำหรับคำแนะนำด้วยเสียง) กด Enter และคำสั่งนั้นจะทำงานเมื่อคำสั่งปัจจุบันเสร็จสิ้น .

คุณแสดงความคิดเห็นเกี่ยวกับการทำสิ่งนี้โดยอัตโนมัติ ... ใช้ PS1 หรือบางสิ่งบางอย่างเพื่อสัมผัสการประทับเวลา ใช้ PS2 เพื่อตรวจสอบระยะเวลานับตั้งแต่ PS1 แตะต้องมัน หากมันมีค่า> n วินาทีให้เรียกใช้คำประกาศ ตอนนี้มันไม่น่ารำคาญเพราะมันไม่ได้เกิดขึ้นสำหรับทุกคำสั่ง

@mankoff True ฟังก์ชั่นที่ง่ายเพื่อลดการพิมพ์ก็เพียงพอแล้ว
Daniel Beck

@mankoff PS2 หรือไม่ นี่ไม่ใช่เพียงแค่พรอมต์ต่อเนื่องหรือไม่ ไม่ได้ขึ้นต้นทุกบรรทัดเอาต์พุตหรือไม่?
Daniel Beck

PS1 / PS2 แค่เดาว่าเป็นสถานที่ที่ฉันเริ่มมองหาถ้าฉันต้องการที่จะใช้มัน บางทีสิ่งทั้งหมดสามารถถูกฝังในเพียง PS1 และอาจมีวิธีที่แตกต่างกันโดยสิ้นเชิงในการสร้างคำสั่งทั่วไปสำหรับคำสั่งทุกคำสั่ง

2

สิ่งที่คุณต้องการคือgrowlnotifyโปรแกรม CLI ที่จะกระตุ้นการแจ้งเตือนคำราม คุณสามารถใช้มันเป็น:

./script.sh;; growlnotify -m "done"

มันมีลูกบิดอีกสองสามตัวที่คุณสามารถเล่นได้ใช้growlnotify -hสำหรับข้อมูลเพิ่มเติม


ขอบคุณ ฉันเพิ่งแสดงความคิดเห็นในเวลาเดียวกันเมื่อฉันพบเช่นกัน อัฒภาคมีความหมายมากกว่า && เช่นกัน
ezrock

1
@ezrock ฉันคิดว่าใครสามารถใช้&&และ||มีข้อความที่แตกต่างกันระหว่างสถานะความสำเร็จและความล้มเหลว แต่ถ้าใครสนใจข้อความที่แสดงหลังจากคำสั่งดำเนินการก็;;จะเข้าใจผิดได้ =)
roguesys

2

คำตอบของ Modifiying Daniel Beck ถ้าคุณทำสิ่งนี้เปลี่ยนแปลงเล็กน้อยมันจะดีมาก

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

จากนั้นเมื่อคุณเรียกใช้ 'svn ยาวขึ้น' คุณจะเห็นข้อความ 'svn up เสร็จสมบูรณ์'

ดีมากถ้าคุณใช้งานเชลล์สคริปต์จำนวนมากในเวลาเดียวกัน


2

ตอนนี้ OSX 10.8 และใหม่กว่ามีการแจ้งเตือนเนทีฟนี่คือวิธีที่ฉันบรรลุเป้าหมายเดียวกันผ่านทางตัวแจ้งเทอร์มินัล :

  1. ติดตั้งชง
  2. $ brew install terminal-notifier
  3. เพิ่มไปที่~/.bash_profile:

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }

ตรวจสอบให้แน่ใจว่าคุณได้จัดหาโปรไฟล์ของคุณด้วย. ~/.bash_profile(ไม่จำเป็นสำหรับเซสชันเทอร์มินัลในอนาคต) เนื่องจากโปรไฟล์ของคุณได้รับการจัดหาโดยอัตโนมัติเมื่อสร้างเซสชัน

ทดสอบด้วยคำสั่งที่คุณชื่นชอบแล้วตามด้วยการเรียกใช้ฟังก์ชัน

ls ; gn

อาร์กิวเมนต์ของเทอร์มินัลแจ้งเตือนสามารถปรับปรุงบางอย่างได้ แต่ความพยายามอย่างรวดเร็วในการจับคำสั่งก่อนหน้าเพื่อส่งผ่านไปยังฟังก์ชั่นนั้นไม่ประสบความสำเร็จ กล่าวคือเพิ่ม;gnเพื่อรับการแจ้งเตือนในตอนท้ายของกระบวนการที่ยาวนาน



1

นี่คือวิธีเรียกใช้งานอัตโนมัติสำหรับกระบวนการ "ใช้งานนาน": http://hints.macworld.com/article.php?story=20071009124425468

มันเชื่อมโยงเข้ากับ$PROMPT_COMMANDและแจ้งให้เสร็จสิ้นกระบวนการใช้เวลานานกว่า 10 วินาทีเพื่อให้เสร็จสมบูรณ์ คุณอาจต้องปรับแต่งมันให้เหมาะกับสภาพแวดล้อมและเวิร์กโฟลว์ของคุณเอง (ตัวอย่างเช่นการเพิกเฉยต่อความสมบูรณ์ของlessหรือการเรียกใช้ตัวแก้ไข) แต่ดูเหมือนว่าจะทำงานได้ดีพอสมควร


ฉันไม่ได้ลองด้วยตัวเอง แต่วิธีการแบบอัตโนมัติอย่างสมบูรณ์นั้นน่าสนใจจริงๆ โซลูชันอื่นทั้งหมดที่นี่ต้องการทราบล่วงหน้าว่าคำสั่งจะใช้เวลานานและจำได้ว่าจะเรียกใช้สคริปต์ (เช่น. ls; growlnotify) ฉันชอบความคิดที่ไม่จำเป็นต้องเรียกใช้ด้วยตนเอง
ezrock

0

ฉันแหย่ไปรอบ ๆ และพบวิธีง่าย ๆ สำหรับสิ่งนี้ มันเป็นคู่มือเล็กน้อยกว่าที่ฉันต้องการ แต่มันจะไป

  1. ติดตั้ง Growlnotify (อยู่ในโฟลเดอร์พิเศษของการดาวน์โหลดการติดตั้งของ Growl) 1.
  2. ผนวก < && growlnotify -m "Message"> เข้ากับกระบวนการที่มีความยาว

นั่นใช้ได้สำหรับฉันในตอนนี้ แต่ฉันสามารถทำได้ดีกว่า methinks


0

โซลูชัน OSX 10.9+ ที่ไม่มีซอฟต์แวร์บุคคลที่สาม:

ใน OSX 10.9 ขึ้นไปคุณสามารถใช้คำสั่ง AppleScript display notificationเพื่อแสดงคำรามจากเทอร์มินัลดังนี้:

osascript -e 'display notification with title "Process Completed."'

หากคุณไม่ต้องการพิมพ์ทุกอย่างทุกครั้งคุณสามารถใช้alias:

alias growl='osascript -e "display notification with title \"Process Completed.\""'

ตัวอย่าง:

long-running-script.sh; growl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.