คำถามติดแท็ก command-history

คำสั่งเรียกคืนที่พิมพ์ไว้ก่อนหน้านี้ในเชลล์หรือยูทิลิตี้อื่น ๆ

4
ประวัติจะไม่ถูกสงวนไว้ใน zsh
เมื่อใดก็ตามที่ฉันเปิดอินสแตนซ์ใหม่ของเทอร์มินัลประวัติศาสตร์จะว่างเปล่า ทำไมถึงเป็นอย่างนั้น? ฉันจำเป็นต้องตั้งค่าบางอย่างหรือไม่? ในทุบตีไม่จำเป็นสำหรับสิ่งนี้แม้ว่า

2
สิ่งใดอาจทำให้ประวัติทุบตีของฉันถูกล้างอย่างไม่คาดคิด
วันนี้ฉันสังเกตเห็นว่าประวัติทุบตีของฉันถูกล้างออกอย่างสมบูรณ์ ฉันไม่ได้ดำเนินการhistory -cหรือลบ.bash_historyไฟล์ นอกเหนือจากการลบ.bash_historyไฟล์history -cแล้วจะล้างประวัติทุบตีได้อย่างไร?

1
เลื่อนไปที่คำสั่งสุดท้ายบน Terminal? (เช่นเครื่องหมาย OS X Terminal)
เครื่องหมายของ Mac OS X Terminalมีประโยชน์อย่างเหลือเชื่อ Cmd+Upตัวอย่างเช่นเมื่อฉันพิมพ์คำสั่งที่สะท้อนการส่งออกเป็นจำนวนมากจึงเป็นเรื่องง่ายที่จะอ่านจุดเริ่มต้นที่มี มันจะเลื่อนไปที่คำสั่งสุดท้ายและเน้นมันตั้งแต่มีตัวเลือกในการทำเครื่องหมายโดยอัตโนมัติสาย PromptและCmd+Upจะเลื่อนไปยังหน้าล่าสุดเครื่องหมาย มีเทอร์มินัลอีมูเลเตอร์ใด ๆ กับฟังก์ชันนี้หรือไม่? หรือปลั๊กอินอะไรก็ได้ คุณจะไปที่คำสั่งสุดท้ายอย่างรวดเร็วโดยเน้นที่คำสั่งนั้นได้อย่างไร

2
bash_history: แสดงความคิดเห็นคำสั่งที่เป็นอันตราย: `#`
เพื่อป้องกันการบันทึกคำสั่ง "อันตราย" ในประวัติทุบตีฉันได้เพิ่มบรรทัดต่อไปนี้ใน.bashrcไฟล์ของฉัน: HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*' ใช้งานได้ดี แต่มีผลข้างเคียง: ฉันไม่สามารถดูประวัติคำสั่งที่ดำเนินการบนเครื่องได้อย่างสมบูรณ์ สมมติว่าฉันมีเครื่องหลายเครื่องสำหรับการทดลองและฉันต้องการเห็นคำสั่งทั้งหมดที่ดำเนินการ ฉันจะใช้ทุบตีภายในhistoryเพื่อแสดงคำสั่งดำเนินการและบางที grep สำหรับวันที่วันนี้: history | grep Sep-28 สิ่งที่ฉันต้องการทำคือการบันทึกคำสั่ง "อันตราย" เช่นกัน แต่วาง#ที่จุดเริ่มต้นของบรรทัดดังนั้นหากฉันเกิดขึ้นเพื่อดำเนินการคำสั่งจากประวัติโดยไม่ได้ตั้งใจจะไม่มีความเสียหายเกิดขึ้น ฉันไม่รู้ว่ามันเป็นไปได้ไหม ปรับปรุงและชี้แจง: สาเหตุหลักที่ทำให้เกิดปัญหาสำหรับฉันก็คือฉันมักจะเชื่อมต่อกับเครื่องของฉันจากเครื่องเทอร์มินัลหลายเครื่องและคำสั่งใด ๆ ที่ทำงานบนเครื่องเทอร์มินัลเครื่องหนึ่งจะอ่านทันทีในประวัติศาสตร์ของเทอร์มินัลอื่น ๆ นี่คือความสำเร็จโดย PROMPT_COMMAND="history -a; history -c; history -r" ลองจินตนาการว่าฉันเปิดเทอร์มินัลสองเครื่อง ในหนึ่งฉันมีcat /dev/foo > file.outกระบวนการทำงานบางอย่าง ls -lAhFในครั้งที่สองฉันจะตรวจสอบความคืบหน้าด้วย ฉันทำซ้ำlsโดยการกดUpและENTER(นั่นคือคำสั่งสุดท้ายจากประวัติ) ทันทีที่เสร็จสิ้นคำสั่งแรกที่คำสั่งสุดท้ายจากประวัติศาสตร์จะไม่มีอีกต่อไปแต่ls cat /dev/foo > file.outถ้าฉันไม่ระวังฉันจะเริ่ม cat อีกครั้งและเขียนทับ …

3
ประวัติทุบตีสำหรับเซสชั่นปัจจุบัน
บางทีฉันอาจมองเห็นบางอย่าง แต่มีวิธีรับประวัติทุบตีปัจจุบันของคุณสำหรับเซสชันปัจจุบันที่คุณใช้งานอยู่ ถ้าฉันวิ่ง ssh host $ pwd $ ls $ cd /tmp ฉันแค่อยากเห็น 3 คำสั่งเหล่านั้นและไม่มีอะไรอื่น

3
วิธีการตั้งค่าจำนวนคำสั่งประวัติการเรียกคืน
ฉันกำลังใช้ทุบตี เพื่อเรียกดูประวัติคำสั่งของฉันฉันกำลังเรียกhistoryคำสั่งที่ฉันเชื่อว่ากำลังเรียกโปรแกรม Gnu ในชื่อเดียวกัน (ฉันไม่รู้ว่ามีวิธีเฉพาะทุบตีที่ดีกว่า) ใน. bashrc ของฉันฉันมีบรรทัดที่export PROMPT_COMMAND='history -a'จะเก็บประวัติจากเซสชันทุบตีหลายครั้งที่ฉันใช้อยู่ ถ้าฉันทำประวัติฉันเห็น 524 รายการในปัจจุบันเท่านั้น สามารถกำหนดค่านี้ได้หรือไม่ ฉันต้องการที่จะเพิ่มจำนวนนี้เป็นจำนวนมากขึ้นกล่าวว่า 2000

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

1
อัพเดตประวัติทุบตีในเทอร์มินัลอื่นเมื่อออกจากเทอร์มินัลหนึ่ง
ฉันรู้ว่าคำถามนี้ไม่ปิดบังเนื่องจากมีการถามที่นี่ให้อัปเดต (และทำซ้ำที่นี่) สิ่งที่ฉันพยายามทำให้สำเร็จนั้นต่างออกไปเล็กน้อย ฉันไม่ชอบความคิดที่จะให้ฉันเขียนไฟล์ใหม่ทุกครั้งที่lsฉันพิมพ์ ( history -a; history -c; history -r) ฉันต้องการอัปเดตไฟล์เมื่อออก ง่ายมาก (จริง ๆ แล้วเป็นค่าเริ่มต้น) แต่คุณต้องต่อท้ายแทนที่จะเขียนใหม่: shopt -s histappend ตอนนี้เมื่อปิดเทอร์มินัลฉันต้องการทำให้คนอื่น ๆ ทั้งหมดที่ยังคงเปิดอยู่เพื่อรับทราบการอัพเดต ฉันชอบทำสิ่งนี้โดยไม่ตรวจสอบผ่าน$PS1ทุกอย่างcommandที่ฉันพิมพ์ ฉันคิดว่ามันจะดีกว่าถ้าจะจับสัญญาณบางอย่าง คุณจะทำอย่างไร ถ้าไม่ได้เป็นไปได้อาจจะเป็นที่เรียบง่ายcronjob? เราจะไขปริศนานี้ได้อย่างไร?

1
ประวัติทุบตีด้วยการประทับเวลา
ฉันต้องการเก็บเวลาประทับของคำสั่งที่บันทึกใน Bash $ HISTFILE ของฉันเป็นไปได้หรือไม่ ฉันไม่ได้จัดการตั้งค่าโดยใช้ man bashเป็นแหล่งข้อมูล ตัวเลือกอื่น ๆ ของฉันมีดังนี้: function thebanana() { local -r -a bash_commands=( "ls" # ... more coconut commands ) for bash_command in "${bash_commands[@]}"; do printf "${bash_command}" printf ":" done } export HISTFILE=banana export HISTIGNORE="$(thebanana)" export HISTSIZE=999999 export HISTFILESIZE=999999999 export HISTCONTROL=ignoredups:erasedups ฉันควรจะกล่าวถึงฉันใน OS X Mountain …

1
วิธีรับรายการประวัติเพื่อแสดงอย่างถูกต้องในหลายบรรทัด
สมมติว่าฉันได้เข้าฟังก์ชั่นที่ bash prompt, ในหลาย ๆ บรรทัดแทนที่จะบีบมันลงบนอันเดียวด้วย semicolons: $ function blah { echo blah } $ history -1 12690 function blah {\necho blah\n} จะให้แสดงด้วยอักขระบรรทัดใหม่จริงแทนที่จะเป็น '\ n' ได้อย่างไร

5
วิธีการจำคำสั่งก่อนหน้า (โดยไม่มีการดำเนินการ) เพื่อเปลี่ยนคำสั่ง?
ฉันจำเคล็ดลับที่ฉันไม่สามารถเรียกใช้คำสั่งล่าสุดโดยไม่เรียกใช้: สมมติว่าฉันต้องการที่จะสามารถเข้าถึงคำสั่งได้! 1255 เมื่อกดปุ่มลูกศรขึ้นและแก้ไขคำสั่ง ดังนั้นเคล็ดลับในการเรียกคำสั่งทำให้มันปรากฏขึ้นในบรรทัดคำสั่ง แต่ไม่ได้ดำเนินการและหลังจากนั้นสามารถเข้าถึงได้ผ่านทางปุ่มลูกศรขึ้น? ฉันพยายามใส่เสียงก้อง แต่จากนั้นฉันก็มีเสียงก้องต่อคำสั่งฉันจำไม่ได้ว่าทำอย่างถูกต้อง

1
ไวยากรณ์ HISTTIMEFORMAT
มีจำนวนมากมีbashคำแนะนำที่รวมถึงการเพิ่มเส้นดังกล่าวเป็นHISTTIMEFORMAT='%d/%m/%y %T 'หรือHISTTIMEFORMAT="%F %T "ไปหรือ~/.bashrc/etc/bash.bashrc มีช่องว่างเสมอก่อนที่จะพูดสุดท้าย HISTTIMEFORMAT='%d/%m/%y %T'เช่นไม่เคย ทำไมนี้

3
ทำไมเครื่องหมายอัศเจรีย์ "!" บางครั้งทำให้ไม่พอใจทุบตี?
ฉันรู้ว่า!มีความสำคัญเป็นพิเศษใน commandline ในบริบทของประวัติศาสตร์ commandline แต่นอกเหนือจากนั้นในสคริปต์การเรียกใช้เครื่องหมายอัศเจรีย์ในบางครั้งอาจทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์ ฉันคิดว่ามันมีบางอย่างเกี่ยวข้องกับการeventแต่ฉันไม่ทราบว่าเหตุการณ์คืออะไรหรือทำอะไร ถึงกระนั้นคำสั่งเดียวกันก็สามารถทำงานต่างกันในสถานการณ์ที่ต่างกัน ตัวอย่างสุดท้ายด้านล่างทำให้เกิดข้อผิดพลาด แต่ทำไมเมื่อรหัสเดียวกันทำงานนอกการทดแทนคำสั่ง? .. ใช้ GNU bash 4.1.5 # This works, with or without a space between ! and p { echo -e "foo\nbar" | sed -nre '/foo/! p' echo -e "foo\nbar" | sed -nre '/foo/!p'; } # bar # bar # This works, …

2
HISTTIMEFORMAT ไม่แสดงวันที่และเวลาที่ถูกต้องสำหรับประวัติ
หลังจากส่งออกHISTTIMEFORMAT='%F %T'ฉันพยายามค้นหาhistory แต่ผลลัพธ์แสดงคำสั่งทั้งหมดที่ดำเนินการในวันเดียวกัน ฉันจะตรวจสอบวันที่และเวลาจริงของการดำเนินการคำสั่งจริงได้อย่างไร

4
วิธีการลบคำสั่งสุดท้าย (หรือคำสั่งปัจจุบันสำหรับโบนัส) จากประวัติ zsh
แน่นอนว่ามีวิธีที่ชาญฉลาดอย่างง่ายที่สุดในการทำเช่นนี้ แต่เนื่องจากประวัติใน zshell ดูเหมือนจะใช้นามแฝงเป็น fc จึงไม่มีวิธีใช้เทคนิคที่กล่าวถึงในวิธีการลบบรรทัดเดียวออกจากประวัติ . ตัวชี้ใด ๆ เกี่ยวกับวิธีการทำเช่นนี้? กรณีการใช้งานของฉันคือการลบคำสั่งที่ออกล่าสุดจากประวัติดังนั้นจึงหยุดการเติมข้อความอัตโนมัติ (ส่วนใหญ่เมื่อคุณพิมพ์ผิดบางอย่าง ฉันรู้ว่าฉันสามารถรับคำสั่งที่ออกล่าสุดโดยทำ history | tail -n 1แต่ history -d ไม่ทำงานและฉันไม่พบเอกสารที่เหมาะสมสำหรับ zsh

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