การใช้นามแฝงเริ่มต้น“ แจ้งเตือน”


9

Alert alias ดีฟอลต์ใช้สำหรับคำสั่ง

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

การดำเนินการalertให้การแจ้งเตือนด้วยข้อความแจ้งเตือนและไอคอนสถานี ดำเนินการด้วยหนึ่งพารามิเตอร์เช่นalert !!!!!ให้การแจ้งเตือนด้วยข้อความแจ้งเตือน !!!!! และ!!!!! .

ดังนั้นสิ่งที่แตกต่างระหว่างที่เรียบง่ายnotify-sendและสั่งนี้นามแฝง complexed ซึ่งใช้แจ้ง-ส่งก้องประวัติศาสตร์และหาง sed ?

นามแฝงนี้มีประโยชน์ในสถานการณ์ใดบ้างหรือเป็นเพียงสร้างขึ้นมาเพื่อเล่น (สิ่งที่ชอบใช้ sudo sudo sudo sudo sudo apt-get install

ฉันใช้ Ubuntu 12.10


สิ่งเดียวที่ฉันคิดได้ก็คือการสร้างการแจ้งเตือนง่ายขึ้น ... อาจจะ?
saiarcot895

@ saiarcot895 ลองnotify-send Linux Ubuntuมันเหมือนกันมากความแตกต่างเพียงอย่างเดียวคือการalertแสดงไอคอน แต่ฉันไม่เข้าใจว่าทำไมคำสั่งที่มี sed, tail และ history
ผู้ใช้ที่ลงทะเบียน

คำตอบ:


8

คุณสามารถใช้ man page เพื่อดูรายละเอียดเกี่ยวกับคำสั่งที่รวมกันที่นี่ นี่เป็นเพียงเล็กน้อยเกี่ยวกับวัตถุประสงค์ของคำสั่งเหล่านี้ที่นี่:

"$([ $? = 0 ] && echo terminal || echo error)"

สิ่งนี้จะสะท้อนถึงเทอร์มินัลหรือข้อผิดพลาดตามสถานะการดำเนินการ - สำเร็จหรือล้มเหลวตามลำดับของคำสั่งสุดท้าย และผลลัพธ์จะเป็นค่า-iสวิตช์ของnotify-sendการแสดงไอคอน

history|tail -n1

.. เพื่อเรียกใช้คำสั่งสุดท้าย

และsedแยกวิเคราะห์ข้อความเพื่อแสดงด้วยnotify-sendข้อความ


เพื่อให้เข้าใจสิ่งเหล่านี้ลองทำสิ่งต่อไปนี้:

true; echo "$([ $? = 0 ] && echo terminal || echo error)"

..this จะสะท้อนขั้ว

false; echo "$([ $? = 0 ] && echo terminal || echo error)"

..this จะสะท้อนข้อผิดพลาด

notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'

และ,

echo $?

.. มีประโยชน์มากที่จะทราบค่าการออกของคำสั่งสุดท้ายที่ดำเนินการ

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

.. ซ้อนechoเป็นตัวอย่างง่าย ๆ สำหรับใช้$()ในคอมโบคำสั่ง


1
ดังนั้นนามแฝงนี้สามารถใช้เพื่อบอกผู้ใช้ว่าคำสั่งดำเนินการสำเร็จหรือล้มเหลว แต่ในลักษณะ GUI
สมาชิกที่ลงทะเบียน

ใช่มันจะแจ้งให้ทราบเกี่ยวกับการประหารชีวิตที่ประสบความสำเร็จหรือไม่สำเร็จแบบกราฟิกโดยใช้notify-send.. สถานะทางออกของคำสั่งสุดท้ายจะถูกตรวจสอบด้วยค่า$?.. ฉันได้รวมสิ่งนี้ไว้ในการแก้ไข ..
แม่นยำ

7

ให้ฉันพยายามอธิบายสิ่งที่เกิดขึ้นที่นี่:

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

1 --urgency=low

-u, --urgency = LEVEL ระบุระดับความเร่งด่วน (ต่ำ, ปกติ, สำคัญ)

2 -i "$([ $? = 0 ] && echo terminal || echo error)" .

  -i, --icon=ICON[,ICON...]
         Specifies an icon filename or stock icon to display.

ส่วน"$([ $? = 0 ] && echo terminal || echo error)"นี้ $?เป็นข้อผิดพลาดสุดท้าย (หรือสำเร็จ) ที่ส่งคืน ดังนั้นมันจะส่งกลับข้อความ "terminal" ถ้ารหัสทางออกสุดท้ายของคำสั่งเป็น 0 โดยไม่มีข้อผิดพลาด หรือส่งกลับ "ข้อผิดพลาด" หากรหัสออกไม่ใช่ 0

และในที่สุดเราก็ได้ไอคอน "terminal" หรือ "error"

3 $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')

history|tail -n1 ส่งคืนคำสั่งสุดท้ายจากประวัติ

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'') สิ่งนี้สามารถแบ่งออกเป็น 2 บล็อกของ sed

3.1 sed 's/^\s*[0-9]\+\s*//'ลบช่องว่างและแท็บก่อนหน้าทั้งหมดทั้งหมดหลังจากนั้นและลบช่องว่างและแท็บที่ส่วนท้าย

3.2 s/[;&|]\s*alert$//ลบสัญลักษณ์ก่อนหน้า; & |แท็บและช่องว่างใด ๆ และคำว่า "การแจ้งเตือน"

มันเป็นเพียงการทำความสะอาดคำสั่งดำเนินการล่าสุดจากสัญลักษณ์และคำว่า "แจ้งเตือน" ในตอนท้าย

ดังนั้นถ้าคุณใช้สิ่งนี้:

echo "Hello alert" | alert

มันจะแสดงการแจ้งเตือนด้วยคำสั่งก่อนหน้า


3

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

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

จากนี้คุณจะเห็นว่ามันควรจะใช้เป็น<command>; alertที่ที่คุณแทนที่คำสั่งด้วยคำสั่งของคุณ ฉันเองต้องดาวน์โหลดวิดีโอทุกวันผ่าน wget เพราะมันล้มเหลวเป็นระยะ ดังนั้นฉันเพิ่งต่อท้ายคำสั่งดาวน์โหลดพร้อมการแจ้งเตือนเพื่อแจ้งให้ฉันทราบทันทีเมื่อมันล้มเหลวเพื่อให้สามารถดำเนินการต่อได้อีกครั้ง (การแจ้งเตือนของฉันได้รับการแก้ไขเพื่อส่งเสียงบี๊บ


0

เหตุผลsed, tailและhistoryจะมีเป็นเพราะความต้องการที่จะได้รับข้อความที่คุณพิมพ์ (ด้วยเหตุผลบางอย่าง) สิ่งที่คุณพิมพ์ไม่สามารถใช้งานได้โดยตรงผ่านตัวแปรใด ๆ ดังนั้นจึงต้องใช้historyเพื่อรับรายการทุกสิ่งที่คุณพิมพ์tail -n1เพื่อให้ได้สิ่งสุดท้ายที่คุณพิมพ์และ regex บางตัวเพื่อกำจัดคำสั่ง "alert" ในตอนเริ่มต้น

เพียงเพื่อขยายในนี้มีคำสั่งตามเงื่อนไขที่มีการทดสอบเพื่อดูว่า$? = 0เป็นจริง จากสิ่งที่ฉันสามารถบอกได้ว่าถ้ามันเป็นเรื่องจริงแล้วมันมาจากสถานีและควรได้รับการยกย่องว่าเป็นข้อความปกติ มิฉะนั้นจะถือว่าเป็นข้อผิดพลาดและไอคอนข้อผิดพลาดจะปรากฏขึ้น


มันไม่ได้กำจัดการแจ้งเตือนมันจะยังคงอยู่ในการแจ้งเตือน
สมาชิกที่ลงทะเบียน

1
หากคุณตอบด้วย "ด้วยเหตุผลบางอย่าง" ก็มักจะไม่ใช่คำตอบที่ดีมาก)
ขอ

@Requist: ฉันเพิ่ม "ด้วยเหตุผลบางอย่าง" สำหรับคำสั่งเฉพาะนั้นเพราะฉันอยู่ภายใต้การแสดงผลที่$0ให้อาร์กิวเมนต์แรกสำหรับคำสั่ง มันอาจจะแตกต่างกันในกรณีของนามแฝง
saiarcot895
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.