เหตุใดประวัติทุบตีใน mac ของฉันจะไม่บันทึก?


28

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

ฉันจะทราบได้อย่างไรว่าเกิดอะไรขึ้น หรือตั้งค่าทุกอย่างใหม่จากที่ว่างเปล่า


อาจเป็นโปรไฟล์หรือไฟล์ rc ของคุณ มีอะไรในพวกเขา
user14492

1
สิทธิ์และเจ้าของใน. bash_history ของคุณคืออะไร ฉันมี 600 และเป็นของฉัน นอกจากนี้มีอะไรใน $ HIST_FILE
blm

@blm สิทธิ์ถูกต้อง; การพิมพ์ $ HIST_FILE ฉันพบข้อมูลเกี่ยวกับ. bash_sessions เห็นได้ชัดว่ามีปัญหาเมื่อในตอนท้ายของเซสชั่น, OS บันทึกไฟล์เหล่านั้นไปยังไฟล์ประวัติ ฉันไม่ต้องการตรวจสอบอีกต่อไปดังนั้นฉันจึงนำสิ่งนี้ไปไว้ในบ้านของฉัน.bash_sessions_disableและรู้ว่ามันกลับไปสู่พฤติกรรมเริ่มต้น
abaini01

โปรดพิจารณายื่นรายงานข้อผิดพลาดกับ Apple: developer.apple.com/bug-reporting
Chris Page

คำตอบ:


31

ฉันทำอย่างนี้:

เพิ่มตัวแปรให้กับ.bash_profileไฟล์

SHELL_SESSION_HISTORY=0

รีสตาร์ทเครื่องและหลังจากนั้นมันก็ทำงานได้ตามที่ฉันต้องการ (มันบันทึกคำสั่งหลังจากที่ฉันปิดสถานี)

ป.ล. ฉันยังใช้HISTFILESIZEและHISTSIZEตัวแปร

HISTSIZE คือจำนวนบรรทัดหรือคำสั่งที่เก็บไว้ในหน่วยความจำในรายการประวัติขณะที่เซสชัน bash ของคุณกำลังดำเนินการอยู่

HISTFILESIZE คือจำนวนบรรทัดหรือคำสั่งที่ (a) ได้รับอนุญาตในไฟล์ประวัติเมื่อเวลาเริ่มต้นของเซสชันและ (b) ถูกเก็บไว้ในไฟล์ประวัติเมื่อสิ้นสุดเซสชัน bash ของคุณเพื่อใช้ในเซสชันในอนาคต


3
การเพิ่มที่หนึ่งบรรทัดทำงานได้ดีสำหรับฉันใน El Capitan ขอบคุณ
Aidan

2
ขอบคุณ! ฉันชอบที่จะรู้ว่าทำไมงานนี้เช่นกันถ้ามีคนรู้ (History = 0 จะบอกเป็นนัยถึงความคิดของฉันที่ไม่รู้ว่าประวัติศาสตร์ทั้งหมดจะสูญหายไป แต่ดูเหมือนว่าจะมีผลตรงกันข้าม)
Mike Williamson

@Sysqa มีวิธีแก้ปัญหา "กลาง" บ้างไหม? คุณลักษณะที่ "บันทึกและกู้คืนประวัติคำสั่ง bash อย่างอิสระสำหรับแต่ละเซสชันของเทอร์มินัลที่เรียกคืน" ดูเหมือนฟังก์ชั่นที่ดีซึ่งบางโปรแกรมอาจได้รับประโยชน์ มีวิธีใดบ้างที่จะได้รับประโยชน์จากการกำหนดค่าก่อนหน้าและวิธีการใหม่ที่มีการกำหนดค่าบางอย่าง?
loco.loop

8

เริ่มต้นในOS X 10.11 El Capitanสคริปต์ระบบที่ติดตั้ง/etc/bashrc_Apple_Terminalพิกัดกับเทอร์เพื่อประหยัด / restore ประวัติคำสั่งแยกต่างหากสำหรับแต่ละขั้วบูรณะResume

อ่านความคิดเห็น/etc/bashrc_Apple_Terminalเพื่อดูคำอธิบายเกี่ยวกับวิธีการจัดการประวัติคำสั่งต่อเทอร์มินัลและวิธีปรับแต่ง

หากคุณปรับแต่งPROMPT_COMMANDให้แน่ใจว่าเชื่อมต่อกับค่าก่อนหน้าดังนั้นคุณจึงไม่ต้องล้างคำสั่งที่ระบบจัดหาให้:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

หากคุณติดตั้งEXITตัวจัดการสัญญาณด้วยtrapให้แน่ใจว่าได้ทำสิ่งที่คล้ายกัน (หรือโทร shell_session_update จากตัวจัดการของคุณถ้าคุณไม่สามารถหาวิธีการเชื่อมต่อกับค่าก่อนหน้า - มันเกี่ยวข้องเล็กน้อย)

~/.bash_sessionsเมื่อคุณออกจากเปลือกรหัสนี้จะบันทึกคำสั่งใหม่ให้กับประวัติศาสตร์ของสถานีใน เพื่อดูว่ามันพบปัญหาใด ๆ แทนที่จะปิดเทอร์มินัลออกจากเชลล์ด้วยตนเองด้วยexit(หรือ Control-D) มันบันทึกข้อความความคืบหน้า หมายเหตุหากยังไม่สมบูรณ์หรือหากมีคำเตือนหรือข้อความแสดงข้อผิดพลาดปรากฏขึ้น

โดยทั่วไปแล้วbashrc_Apple_Terminalความพยายามในการตรวจสอบและปิดใช้งานประวัติแต่ละเซสชันหากดูเหมือนว่าผู้ใช้ได้ทำการปรับแต่งใด ๆ ที่ไม่เข้ากัน ดูเหมือนคุณอาจจะพบว่ามันไม่ได้จัดการ โปรดพิจารณายื่นรายงานข้อผิดพลาดกับ Apple: https://developer.apple.com/bug-reporting/


ฉันไม่ได้ทำการตั้งค่าพิเศษใด ๆ ดังนั้นฉันเดาว่ามันไม่ใช่ปัญหา คุณช่วยอธิบายสิ่งที่ PROMPT_COMMAND ทำ
loco.loop

@ loco.loop คุณหมายถึง“ ตัวแปร PROMPT_COMMAND ของ Bash มีไว้เพื่ออะไร?” หรือคุณหมายถึง“ สิ่งที่/etc/bashrc_Apple_Terminalใช้ PROMPT_COMMAND สำหรับ?” หากหลังฉันอ้างอิงคุณไปยังรหัสซึ่งมีรายละเอียดเอกสาร หรือคุณควรเริ่มต้นคำถาม & คำตอบอื่น ๆ
Chris Page

ฉันหมายถึงสิ่งที่ PROMPT_COMMAND สำหรับ ... @ChrisPage
loco.loop

@ loco.loop ฉันแนะนำคุณถึงเอกสาร Bash หรือแนะนำให้คุณเริ่มถาม & ตอบเกี่ยวกับเรื่องนั้น
Chris หน้า

6

ในกรณีที่มีคนอื่น ๆ ออกมีที่มี RVM (ทับทิมจัดการเวอร์ชัน) ติดตั้ง: ตรวจสอบเพื่อดูว่าคุณมีบรรทัดต่อไปนี้ในของคุณ~/.profile, ~/.bashrcหรือ~/.bash_profileไฟล์

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

อาจเป็นไปได้ว่า RVM ป้องกันการ "ขอ" เพื่อให้ bash_sessions ทำงาน

นั่นคือปัญหาสำหรับฉัน ลองแสดงความคิดเห็น

ที่มา: Reddit


3

ในการติดตั้งใหม่ของ Mac OS X (อัปเดตเป็น 10.13.6) ประวัติคำสั่ง bash จะไม่ถูกบันทึก นอกจากนี้ยังไม่มีไฟล์. bashrc หรือ. bash_profile ในกรณีนี้เพียงเพิ่มไฟล์. bashrc ที่ว่างเปล่าไว้ให้ฉัน

touch .bashrc

นั่นเป็นสิ่งที่คุณต้องการ ...


ดูเหมือนว่าจะแก้ไขปัญหาในโมฮาวี / 10.14 เช่นกัน :-)
ssc

3

ฉันมีปัญหาเดียวกันกับ osx Mojave ที่เพิ่งติดตั้งใหม่ ฉันตรวจสอบ~/.bash_historyไฟล์ของฉันและเห็นสิ่งนี้:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

เพียงแค่ chowning มันกลับไปที่ Gilf แก้ไขปัญหาได้ ฉันใช้:

sudo chown gilm /Users/gilm/.bash_history

และนั่นแก้ไขปัญหาของฉัน


2

คุณสามารถสร้าง.bash_logoutไฟล์โดยทำสิ่งต่อไปนี้:

shell_session_update

แหล่งข่าวจากความคิดเห็น GitHub


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