Thông báo gầm gừ để hoàn thành nhiệm vụ Shell


12

(Cụ thể về OSX)

Tôi, giống như nhiều người khác ngoài bản thân tôi thường thấy mình khởi động một quy trình trong trình bao mất một hoặc hai phút để hoàn thành (ví dụ như một cam kết svn lớn). Trong thời gian đó, tôi thường sử dụng alt-tab và làm mới reddit / slashdot / wikipedia / bất cứ điều gì. Sẽ thật tuyệt khi có một cái gì đó được thiết lập để đăng thông báo gầm gừ khi quá trình shell kết thúc.

Trong thế giới lý tưởng của tôi, nó sẽ hoạt động như thế này: "Nếu một quá trình vừa thoát khỏi một tab mở trong Terminal, hãy đăng thông báo gầm gừ".

Bất cứ ai khác có một cái gì đó như thế này được thiết lập?


1
Lưu ý rằng tiếng gầm sẽ chỉ thông báo cho bạn nếu bạn vẫn ngồi ở màn hình. Đối với các chương trình dài hơn, sử dụng lệnh "say" để nhận gợi ý âm thanh rằng nó đã kết thúc.

@mankoff: Bạn có thể định cấu hình growlnotifycài đặt thông báo ứng dụng Growl.prefPaneđể bao gồm âm thanh thông báo âm thanh. Tuy nhiên, nó không thể thay đổi tùy thuộc vào lệnh bạn thực hiện, như thế saynào. Nhưng đó là cách ít đáng sợ hơn.
Daniel Beck

Câu trả lời:


11

Bạn có thể cài đặt growlnotify để làm điều này.

$ ./some_program && growlnotify Title -m Message

Tất nhiên bạn sẽ cần phải nghĩ về điều này trước khi thực hiện lệnh của bạn. Cách thay thế (tôi không biết làm thế nào để đạt được điều này) sẽ là một thông báo Growl cho mỗi lệnh đơn lẻ, điều này sẽ gây khó chịu vô cùng.


Để đơn giản hóa việc sử dụng growlnotify cho trường hợp sử dụng của bạn, hãy chỉnh sửa ~/bash_profilevà thêm vào như sau:

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

bây giờ bạn có thể chỉ đơn giản long your_command(tương tự sudo). Ctrl-Ađịnh vị con trỏ ở đầu dòng, nếu bạn (như tôi) luôn gõ lệnh thực tế trước và cần thêm tiền tố sau đó.

Rất tiếc, bash-fu của tôi không đủ để có thể thêm lệnh vào growlnotifytin nhắn


bình luận của per @ mankoff cho câu trả lời này:

Bạn có thể chỉ cần gõ trong khi lệnh đang chạy, nó sẽ được thực hiện sau đó. Tôi đã tạo chức năng sau cho tôi:

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

Sử dụng như gn svn.


2
Bạn không cần nghĩ về nó trước lệnh. Nếu, trong khi nó đang chạy, bạn nhận ra rằng bạn muốn được thông báo khi hoàn thành, chỉ cần gõ "gn foo" (hoặc "nói xong", cho gợi ý âm thanh), nhấn enter và lệnh đó sẽ chạy khi lệnh hiện tại kết thúc .

Bạn nhận xét về việc thực hiện điều này một cách tự động ... Sử dụng PS1 hoặc một cái gì đó để chạm vào dấu thời gian. Sử dụng PS2 để xác minh xem PS1 đã chạm vào nó bao lâu. Nếu nó đã được> n giây, sau đó chạy growlnotify. Bây giờ nó không gây phiền nhiễu vì nó không xảy ra với mọi lệnh.

@mankoff Đúng. Vì vậy, một chức năng đơn giản để giảm việc gõ là đủ.
Daniel Beck

@mankoff PS2? Đây không phải chỉ là dấu nhắc tiếp tục sao? Nó không có tiền tố mỗi dòng đầu ra ..?
Daniel Beck

PS1 / PS2 chỉ là phỏng đoán khi tôi bắt đầu tìm kiếm nếu tôi muốn thực hiện điều này. Có lẽ toàn bộ điều có thể được nhúng chỉ trong PS1. Và có lẽ có nhiều cách hoàn toàn khác nhau để thực hiện thiết lập tiếng gầm gừ chung cho mỗi lệnh.

2

Những gì bạn cần là growlnotifychương trình CLI để kích hoạt thông báo gầm gừ. Bạn có thể sử dụng nó như:

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

Nó có thêm một vài nút bạn có thể chơi, sử dụng growlnotify -hđể biết thêm


Cảm ơn. Tôi chỉ bình luận cùng một lúc khi tôi thấy điều đó quá. Dấu chấm phẩy có ý nghĩa hơn cả &&.
ezrock

1
@ezrock Tôi cho rằng một người có thể sử dụng &&||có các thông điệp khác nhau giữa các trạng thái thành công và thất bại, nhưng nếu ai đó chỉ quan tâm đến một thông điệp được hiển thị sau khi lệnh thực thi, thì ;;có thể đánh lừa được. =)
roguesys

2

Sửa đổi câu trả lời của Daniel Beck nếu bạn thực hiện thay đổi nhỏ này sẽ khiến nó rất hay.

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

Sau đó, khi bạn chạy 'svn dài', bạn sẽ thấy thông báo 'svn đã hoàn thành.'

Rất đẹp nếu bạn chạy nhiều kịch bản shell tốn thời gian cùng một lúc.


2

Bây giờ OSX 10.8 trở lên có thông báo gốc, đây là cách tôi hoàn thành mục tiêu tương tự thông qua trình thông báo đầu cuối :

  1. Cài đặt bia
  2. $ brew install terminal-notifier
  3. Thêm cái này vào ~/.bash_profile:

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

Đảm bảo rằng bạn đã cung cấp hồ sơ của mình với . ~/.bash_profile(không cần thiết cho các phiên cuối cùng trong tương lai), vì hồ sơ của bạn được lấy nguồn tự động khi tạo phiên.

Kiểm tra với lệnh yêu thích của bạn, theo sau là chức năng gọi.

ls ; gn

Các đối số cho trình thông báo đầu cuối có thể cải thiện một chút, nhưng một nỗ lực nhanh chóng để lấy lệnh trước đó để chuyển đến hàm không thành công và điều này mang lại cho tôi tất cả các chức năng mà tôi cần. Cụ thể, thêm ;gnđể nhận thông báo ở cuối bất kỳ quy trình dài nào.



1

Đây là một cách để nó được gọi tự động cho các quy trình "chạy dài": http://hints.macworld.com/article.php?story=20071009124425468

Nó móc vào $PROMPT_COMMANDvà thông báo hoàn thành các quá trình mất hơn 10 giây để hoàn thành. Bạn có thể cần phải điều chỉnh nó cho phù hợp với môi trường và quy trình làm việc của riêng bạn (ví dụ, bỏ qua việc hoàn thành lesshoặc gọi trình soạn thảo), nhưng có vẻ như nó hoạt động khá tốt.


Tôi đã không thử nó, nhưng cách tiếp cận hoàn toàn tự động nghe có vẻ rất hấp dẫn. Tất cả các giải pháp khác ở đây đòi hỏi phải biết trước rằng lệnh sẽ hoạt động lâu và ghi nhớ để kích hoạt tập lệnh (ví dụ: ls; growlnotify). Tôi thích ý tưởng không cần phải tự kích hoạt nó.
ezrock

0

Tôi chỉ chọc một số chi tiết và tìm thấy một phương pháp đơn giản cho việc này. Đó là một chút thủ công hơn tôi muốn, nhưng ở đây đi.

  1. Cài đặt growlnotify (Nó nằm trong thư mục bổ sung của bản tải xuống cài đặt của Growl) 1.
  2. Nối < && growlnotify -m "Message"> vào một quá trình dài.

Điều đó làm việc cho tôi ngay bây giờ, nhưng tôi có thể làm tốt hơn, methinks.


0

Giải pháp OSX 10.9+ không có phần mềm của bên thứ ba:

Trong OSX 10.9 trở lên, bạn có thể sử dụng lệnh AppleScript display notificationđể hiển thị tiếng gầm gừ từ thiết bị đầu cuối như vậy:

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

Nếu bạn không muốn gõ tất cả những điều đó mỗi lần, bạn có thể sử dụng alias:

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

Thí dụ:

long-running-script.sh; growl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.