Nơi tôi làm việc có các lệnh mất nhiều thời gian để thực thi.
Có một lệnh / tiện ích mà tôi có thể sử dụng để thông báo cho tôi khi việc thực thi lệnh kết thúc không? Nó có thể là một cửa sổ bật lên hoặc có thể một chút âm thanh.
Nơi tôi làm việc có các lệnh mất nhiều thời gian để thực thi.
Có một lệnh / tiện ích mà tôi có thể sử dụng để thông báo cho tôi khi việc thực thi lệnh kết thúc không? Nó có thể là một cửa sổ bật lên hoặc có thể một chút âm thanh.
Câu trả lời:
Nói chung, nếu bạn biết điều này trước khi chạy lệnh, bạn có thể bắt đầu với:
command; command-after &
Điều này sẽ thực thi command-after
sau khi lệnh trước đó đã thoát (bất kể mã thoát của nó). Các &
sẽ bắt đầu nó ở chế độ nền.
Nếu bạn quan tâm đến một lối thoát thành công hay thất bại, hãy sử dụng tương ứng:
command && command-after-only-if-success &
command || command-after-only-if-fail &
Nếu lệnh đã bắt đầu, bạn có thể sử dụng điều khiển công việc để tạm dừng nó, sau đó đưa nó trở lại nền trước với fg
chuỗi thông báo của bạn:
command
# enter Ctrl-z
fg ; command-after
Bây giờ, những gì bạn muốn làm sau này phụ thuộc vào môi trường của bạn.
Trên bất kỳ hệ thống nào , bạn có thể "rung" chuông thiết bị đầu cuối . Phụ thuộc vào hệ thống chính xác của bạn những gì thực sự hoạt động (BSD so với GNU Linux, v.v.), nhưng tput bel
nên làm. Mặc dù vậy, tôi không thể kiểm tra nó ngay bây giờ. Tìm kiếm "chuông reo" để tìm hiểu thêm.
Trên Mac OS X , bạn có thể sử dụng AppleScript để bật lên hộp thoại Finder:
osascript -e 'tell Application "Finder" to display dialog "Job finished" '
Bạn có thể nói điều gì đó với bạn:
say "Job finished"
Hoặc bạn có thể sử dụng hệ thống thông báo của Mountain Lion:
sudo gem install terminal-notifier # <= only need to do this once
terminal-notifier -message "Job finished!" -title "Info"
Trong Gnome , zenity
có thể hiển thị hộp thoại GTK, được gọi từ dòng lệnh. Xem thêm câu hỏi Stack Overflow này: hiển thị hộp thông báo từ tập lệnh bash trong linux . Nó có thể được cài đặt thông qua trình quản lý gói yêu thích của bạn.
zenity --info --text="Job finished"
Một số bản phân phối có thể có xmessage
. Cụ thể cho môi trường GTK, có gxmessage
.
Trên các môi trường máy tính để bàn triển khai Đặc tả Thông báo Máy tính để bàn , chẳng hạn như Ubuntu và Gnome , có một hệ thống thông báo mà bạn có thể kích hoạt notify-send
(một phần của libnotify
).
notify-send "Job finished!"
KDE sử dụng kdialog
, ví dụ:
kdialog --passivepopup 'Job finished'
(command; command-after) &
sao?
Trên các hệ thống giống như unix, bạn có thể rung chuông âm thanh:
echo -e "\a"
tput bel
Tôi đã tạo ra một công cụ đơn giản, cho MacOS X, thực hiện chính xác điều này. https://github.com/vikfroberg/brb
Cài đặt
$ npm install -g brb
Hướng dẫn
$ sleep 3; brb
Để có được một thông báo âm thanh, bạn có thể sử dụng spd-say "Some text"
. Thí dụ:
some-command; spd-say "Yo"
sudo apt-get install speech-dispatcher
. Hoặc sử dụng các lựa chọn thay thế Askubfox.com/questions/501910/ Lời
Tôi mới bắt đầu sử dụng notifu cho các thông báo trên máy tính để bàn từ Cygwin. Đây là một ứng dụng thông báo dòng lệnh cho Windows.
Thí dụ:
ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
Tôi đã viết ntfy
cho chính xác mục đích này. Nó là đa nền tảng và có thể tự động gửi thông báo khi các lệnh chạy dài kết thúc.
Nếu bạn có Python pip
(hầu hết các bản phân phối Linux và MacOS đều có), đây là cách cài đặt và bật thông báo tự động:
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
Kiểm tra nó tại http://ntfy.rtfd.io
Ngoài ra, nó cũng có thể:
Đối với Linux, có một thủ thuật tiện lợi để thực hiện việc này một cách tự động mà không cần phải gõ lệnh để thông báo mỗi lần.
Đầu tiên cài đặt autokey. Điều này giúp xác định hành động cho các tổ hợp phím khác nhau.
sudo apt-get install autokey-gtk
Bây giờ, hãy xác định một cụm từ mới trong autokey và gán phím nóng là Alt + Enter. Thêm cụm từ này:
; notify-send "Job finished!" &
#
Lưu ý rằng một dòng mới sau dòng đầu tiên là quan trọng.
Ngoài ra, thêm một bộ lọc cửa sổ. Tôi sử dụng guake và thiết bị đầu cuối. Bao gồm bất kỳ thiết bị đầu cuối khác mà bạn sử dụng.
.*(guake)|(Terminal).*
Bạn đã hoàn tất!!
Bây giờ, mọi lúc bất cứ khi nào bạn cần nhận thông báo cho lệnh, hãy chạy nó bằng Alt + Enter thay vì Enter / Return.
Nguồn: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html
Mặc dù các câu trả lời khác đã bao gồm hầu hết các cách để nhận thông báo về một công việc đã hoàn thành, tôi muốn đưa ra hai xu của mình kể từ khi bạn hỏi câu hỏi của bạn theo định dạng sau:
Nơi tôi làm việc có các lệnh mất nhiều thời gian để thực thi.
Tôi có cùng một vấn đề. Đôi khi một cái gì đó có thể chạy trong 15 phút.
Tôi có chức năng sau trong .bashrc:
# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
curl -s -F "token=PUSHOVER_TOKEN" \
-F "user=PUSHOVER_USER" \
-F "title=terminal" \
-F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}
Điều này sử dụng ứng dụng Pushover để đẩy thông báo đến điện thoại của tôi. Bằng cách này, tôi có thể đi ăn trưa hoặc tham gia một cuộc họp và vẫn được thông báo về các công việc tôi đã bắt đầu trên máy tính của mình trước khi tôi rời đi.
Tôi sử dụng nó theo cách sau:
command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("
Vì vậy, nếu lệnh trả về mã thoát chính xác, lần đẩy đầu tiên sẽ được thực thi. Khi có lỗi, cái thứ hai sẽ được thực thi.
Tất nhiên, bạn cần tạo người dùng tại Pushover và đăng ký một ứng dụng để gửi thông báo từ https://pushover.net/
Hy vọng điều này sẽ giúp!
Nếu bạn sử dụng csh hoặc tcsh làm vỏ tương tác, bạn có thể sử dụng notify
lệnh:
% long-running-command &
[1] 14431
% notify %1
%
(later, when the command finishes)
[1] Done long-running-command
Bạn có thể đạt được một hiệu ứng tương tự trong bash với set -b
hoặc set -o notify
.
Điều này có thể không đáp ứng yêu cầu của bạn, vì tất cả những gì nó làm là in một tin nhắn; Tôi không nghĩ rằng nó có thể được cấu hình để bật lên một cửa sổ hoặc rung chuông.
Trên các hệ thống có 'awk' thử
awk 'BEGIN{ print "\a" }'
là người duy nhất làm việc cho tôi.
\a
( câu trả lời thứ ba ).
Nếu bạn đang sử dụng npm
thì trình thông báo nút cung cấp giải pháp đa nền tảng .
notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "
Ước gì tôi nhận thấy chủ đề này nhiều năm trước. Giải pháp của tôi về cơ bản giống như của slhck, nhưng tôi đã viết một kịch bản. Tôi sử dụng nó mọi lúc. Đăng ở đây để chia sẻ nó.
#!/bin/bash
msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi
echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
unset WINDOWID
exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
if ! $quiet; then say "done" &; fi
osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
echo $msg
fi
Một chút giải thích: chuỗi "\x1b]0;$msg\a"
là chuỗi thoát ANSI để đặt thông điệp vào thanh tiêu đề của cửa sổ mà từ đó nó được thực thi. Đôi khi tôi thấy nó khá tiện dụng để có thể xem cửa sổ đó là thông điệp đến từ đâu.
Vì vậy, điều này đến khá muộn, nhưng tôi đã bắt đầu sử dụng một hệ thống để làm điều này: Tôi có một tập lệnh bash thực thi bất kỳ lệnh nào được truyền cho nó sau đó
http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ub Ubuntu /
#!/bin/bash
# file location : /usr/bin/n
set +e
# $@ executes whatever command is typed after the filename
$@
notify-send "Task Completed"
và sau đó tôi chỉ cần trả trước n
n bundle install
n npm install
Một khả năng khác là sử dụng alert
, Hoạt động trên Linux.
>any-command; alert
Nó đưa ra một thông báo như trong hình ảnh. thông báo cảnh báo
Tôi đã tạo một ứng dụng sẽ gửi thông báo tới điện thoại Android của bạn khi quá trình kết thúc để bạn không bị ràng buộc với máy tính của mình.
Cài đặt, sau đó thêm ;notifier.sh
vào cuối lệnh của bạn.
Ví dụ: nếu lệnh của bạn là make install
, bạn sẽ thực hiện lệnh của mình:
make install; notifier.sh
fg;say "Job finished"
sẽ hoạt động. Nhưng ... có cách nào để nó có thể được tự động hóa hơn nữa không - tức là rung chuông hoặc thông báo sau khi hoàn thành bất kỳ công việc nào mất nhiều hơn một ngưỡng như một phút? Có một biến shell, ví dụ như trong bash, đó là thời gian trôi qua của lệnh cuối cùng không?