“ ประวัติ” หยุดทำงานเมื่อทำงานในสคริปต์ทุบตี


9

ฉันกำลังเขียนสคริปต์ง่ายๆเพื่อ grep ประวัติทุบตีของฉันเพื่อค้นหาสายเฉพาะ บนบรรทัดคำสั่งฉันสามารถทำสิ่งต่อไปนี้ซึ่งทำงานได้ดี:

history | grep git

อย่างไรก็ตามเมื่อฉันสร้างสคริปต์ทุบตีด้วยคำสั่งเดียวกับข้างบนก็historyไม่ส่งคืนสิ่งใดเลย:

#!/bin/bash
history | grep git

เมื่อฉันลบบรรทัดแรก#!/bin/bashสคริปต์ของฉันจะทำงานอีกครั้ง เกิดอะไรขึ้นที่นี่ ฉันจะใช้historyภายในสคริปต์ทุบตีได้อย่างไร

คำตอบ:


8

ต่อไปนี้มีไว้สำหรับbash 4.0 or higher onlyแต่มันหลอกลวง :)

#!/bin/bash -i
history | grep sometext

Works! ลองดู ( -i= i nteractive การตั้งค่าสถานะไม่พร้อมใช้งานเพื่อทุบตี 3.x และก่อนหน้า)


ขอบคุณมากสำหรับเพื่อนที่เพิ่งลงคะแนนฉันเพียงเพราะเขาทำได้ (อาจเป็นbashผู้ใช้ v3 จากความยุ่งยากเพียงฮ่าฮ่า) อย่างน้อยสำหรับ Martin คำตอบของฉันก็คือความช่วยเหลือที่ดีนั่นคือ (อย่างน้อย) ความสะดวกสบาย
ไวยากรณ์

ฉันมีคำถามเดียวกันเมื่อฉันเขียนเครื่องมือที่บันทึกการทำงานนอกเวลาทำการสำหรับวิศวกรสนับสนุน 24/7 .. ขอบคุณ!
Henry van Megen

14

เมื่อคุณรันสคริปต์เชลล์ bash ตัวอย่างเช่นโดยการรันไฟล์เรียกทำงานที่มีบรรทัด shebang #!/bin/bashสคริปต์จะถูกรันในเชลล์ที่ไม่มีการโต้ตอบ หนึ่งในคุณสมบัติของเชลล์แบบไม่โต้ตอบคือประวัติถูกปิดใช้งาน ดังนั้นหากคุณต้องการให้สคริปต์ของคุณสามารถใช้ประวัติคุณต้องทำสิ่งนี้:

#!/bin/bash
HISTFILE=~/.bash_history   # Or wherever you bash history file lives
set -o history             # enable history
history | grep git

แน่นอนในกรณีนี้คุณสามารถทำได้:

grep git ~/.bash_history

เนื่องจากทั้งสองข้อข้างต้นกำหนดให้ไฟล์ประวัติ ( ~/.bash_history) เป็นข้อมูลล่าสุดซึ่งแทบจะไม่แน่นอน

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


สิ่งที่เกี่ยวกับการทำhistory -aทันทีหลังจากคำสั่ง set เพื่อให้แน่ใจว่าคำสั่งสุดท้ายจะถูกผนวกเข้ากับไฟล์ก่อน?

4
@ illuminÉ: จะไม่ช่วย เชลล์เริ่มเรียกใช้สคริปต์เป็นกระบวนการที่สมบูรณ์ มันเริ่มต้นด้วยประวัติว่างเปล่าของ frsh
rici
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.