ฉีดบรรทัดเพื่อทุบตีประวัติ


9

โดยค่าเริ่มต้นทุบตีสายจาก~/.bash_historyประวัติศาสตร์ เป็นไปได้ไหมที่จะเพิ่มไฟล์ที่กำหนดเองเพื่อโหลดด้วย ฉันต้องการฉีดไฟล์ที่มีคำสั่งที่ฉันใช้เป็นประจำและเข้าถึงมันผ่านการค้นหาในตัว


2
โดยทั่วไปผู้คนจะเพิ่มชื่อแทนสำหรับคำสั่งที่ใช้บ่อย ...
HBruijn

เยี่ยมมาก แต่นั่นไม่ใช่กรณี - ฉันใช้นามแฝงสำหรับคำสั่งที่ฉันใช้อย่างต่อเนื่อง แต่ฉันมีคำสั่งมากมายที่มีอาร์กิวเมนต์จำนวนมากที่ฉันต้องการแก้ไขตามสถานการณ์
rgtk

4
คุณจะต้องแก้ไขไฟล์บางประเภทซึ่งฟังดูค่อนข้างบ้าและอาจใช้งานไม่ได้ เพียงแค่ทำให้คำสั่งแบบยาวของคุณเป็นเชลล์สคริปต์ที่ยอมรับการขัดแย้งและวางลงในไฟล์/usr/local/binหรือบางสิ่งบางอย่าง
Wesley

หากคุณใช้บ่อยๆพวกเขาจะไม่อยู่ในประวัติของคุณหรือไม่?

ประกาศฟังก์ชัน.bashrcใช่ไหม
Mark K Cowan

คำตอบ:


13

ฉันทำให้มันง่ายด้วยการalias h='history|grep'โหลดลงในโปรไฟล์ Bash ของฉัน

ดังนั้นขั้นตอนการทำงานของฉันคือh command:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

ถ้าฉันต้องการเรียกใช้ " hpssa -stop" ฉันก็แค่พิมพ์!226


นี่เป็นเพียงแนวทางของฉัน แต่บางทีคุณอาจแก้ไขวิธีที่คุณจำรายการประวัติได้ ฉันไม่คิดว่ามันเป็นการสมเหตุสมผลที่จะฉีดข้อมูลลงในไฟล์ประวัติ


เคล็ดลับดีขโมยที่หนึ่ง
Wim

แนะนำให้คุณอาจต้องการดูว่า Ctrl-R ทำอะไรเพื่อค้นหาประวัติของคุณ เตรียมใจของคุณให้ปลื้ม ...

2
@CameronKerr ดูคำตอบด้านล่างนี้ ( serverfault.com/a/695115/120438 ) ข้อเสียของการใช้ Ctrl + R ในกรณีนี้คือให้คำสั่งที่เกี่ยวข้องทีละคำขณะที่ ewwhite วิธีการส่งกลับรายการคำสั่งที่เกี่ยวข้องทั้งหมด
เจนนี่ D

แม้ว่านี่จะเป็นเคล็ดลับที่ดี แต่ก็ไม่ได้ตอบคำถามเลย ฉันไม่เข้าใจว่าคำตอบนี้ได้รับการโหวตสูงสุดอย่างไร กรณีของฉันคือฉันมีภาพนักเทียบท่าซึ่งทำให้มันสูญเสียประวัติเมื่อฉันออกจากมัน ฉันคิดว่ามันคงจะดีถ้าฉันสามารถส่งไฟล์ประวัติผ่านทางบรรทัดคำสั่งไปยังdocker run ...
kumarharsh

@kumar_harsh ยากที่จะโปรด
ewwhite

7

ฉันเคยพึ่งพาCtrl-R( reverse-search-historyคำสั่ง Readline) ซึ่งค้นหาย้อนหลังผ่านประวัติศาสตร์เพื่อดึงคำสั่งยาวที่ป้อนไว้ก่อนหน้านี้ แต่ตอนนี้ฉันต้องการใช้นามแฝงและเชลล์สคริปต์ / ฟังก์ชั่น อย่างไรก็ตามhistoryคำสั่งBash builtin สามารถใช้เพื่อโหลดรายการคำสั่งที่กำหนดเองลงในประวัติปัจจุบันของคุณ

history -r [filename]

จากหน้าคนทุบตี:

อ่านเนื้อหาของไฟล์ประวัติและผนวกเข้ากับรายการประวัติปัจจุบัน

ระบบอัตโนมัติเริ่มต้น

.bashrcฉันก็พยายามเปิดตัวคำสั่งนี้โดยอัตโนมัติโดยเพิ่มเป็นบรรทัดสุดท้ายในของฉัน อย่างไรก็ตามคำสั่งจากไฟล์ประวัติที่กำหนดเองของฉันไม่สามารถใช้ได้เมื่อฉันเริ่มเชลล์ใหม่ ดูเหมือนว่าประวัติเชลล์จะโหลดจาก.bash_historyไฟล์เริ่มต้นเท่านั้น: หลังจากไฟล์เริ่มต้นได้รับการประมวลผลและก่อนที่จะมีพรอมต์แสดงขึ้นมาสำหรับเชลล์เชิงโต้ตอบ น่าเสียดายที่ดูเหมือนจะไม่มีวิธีที่ง่ายในการทำสิ่งนี้โดยอัตโนมัติ


2

ตามที่ @AnthonyGeoghegan สังเกตว่าประวัติถูกโหลดหลังจากประมวลผลไฟล์เริ่มต้นแล้ว ซึ่งนำเสนอวิธีที่แตกต่างในการโหลดประวัติที่ต้องการล่วงหน้าในไฟล์เริ่มต้น:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

โปรดทราบว่าวิธีการนี้อาจส่งผลให้มีการเพิ่มคำสั่งพิเศษหลายชุดใน. bash_history เมื่อเวลาผ่านไป คุณสามารถห่อคำสั่งพิเศษของคุณด้วยบรรทัดความคิดเห็นเพื่อให้คุณสามารถค้นหาและลบออกได้อย่างง่ายดาย (ผ่านเช่น sed) เป็นส่วนหนึ่งของการเติมไฟล์. bash_history สิ่งที่ต้องการ:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.