แก้ไข
TL; DR : สร้างทางลัดในการเติมข้อความอัตโนมัติ และฟังก์ชั่นใน.inputrc
.bashrc
เรียกใช้คำสั่งตามปกติพิมพ์ แต่ENTERกดปุ่มทางลัดที่คุณระบุ.inputrc
บุคคลที่ให้รางวัลกับคำถามนี้กล่าวว่า:
"คำตอบที่มีอยู่ทั้งหมดต้องพิมพ์คำสั่งเพิ่มเติมหลังจากคำสั่งฉันต้องการคำตอบที่ทำได้โดยอัตโนมัติ"
ในขณะที่ค้นคว้าวิธีแก้ปัญหานี้ฉันได้พบคำถามนี้จาก stackexchange ซึ่งอนุญาตให้เชื่อมโยงCtrlJกับลำดับของคำสั่ง: Ctrla(ย้ายไปที่จุดเริ่มต้นของบรรทัด) วางสตริง "mesure" ที่ด้านหน้าของคำสั่งที่คุณป้อนCtrlm(ดำเนินการ)
ดังนั้นคุณจะได้รับฟังก์ชั่นการเติมข้อมูลอัตโนมัติและENTERคำสั่งแยกต่างหากสำหรับการวัดเวลาในขณะที่ยังคงวัตถุประสงค์เดิมของฟังก์ชั่นที่สองที่ฉันโพสต์ร้องไว้
ณ ตอนนี้นี่คือเนื้อหาของ~/.inputrc
ไฟล์ของฉัน:
"\C-j": "\C-a measure \C-m"
และนี่คือเนื้อหาของ.bashrc
(หมายเหตุฉันไม่ได้ใช้ทุบตีในตลอดกาล - ฉันใช้ mksh เป็นเปลือกของฉันดังนั้นนั่นคือสิ่งที่คุณเห็นในโพสต์ต้นฉบับฟังก์ชั่นยังคงเหมือนเดิม)
PS1=' serg@ubuntu [$(pwd)]
================================
$ '
function measure ()
{
/usr/bin/time --output="/home/xieerqi/.timefile" -f "%e" $@
if [ $( cat ~/.timefile| cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
โพสต์ต้นฉบับ
นี่คือความคิดของฉัน - .bashrc
ใช้ฟังก์ชั่นใน หลักการพื้นฐาน - ใช้/usr/bin/time
เพื่อวัดเวลาที่ใช้ในการดำเนินการให้เสร็จสมบูรณ์และหากเกิน 15 วินาทีให้ส่งการแจ้งเตือน
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
ที่นี่ฉันกำลังเปลี่ยนเส้นทางไปที่/dev/null
แต่เพื่อดูผลลัพธ์สามารถเปลี่ยนเส้นทางไปยังไฟล์ได้
วิธีที่ดีกว่ามากคือ IMHO คือส่งเวลาไปยังไฟล์บางไฟล์ในโฟลเดอร์บ้านของคุณ (เพื่อให้คุณไม่ทำให้ระบบของคุณสกปรกด้วยไฟล์ไทม์ไฟล์และรู้ว่าจะมองที่ไหน) นี่คือรุ่นที่สอง
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
และนี่คือภาพหน้าจอของรุ่นที่หนึ่งและสองตามลำดับ
รุ่นแรกไม่มีเอาต์พุต
เวอร์ชันที่สองพร้อมเอาต์พุต