ประวัติทุบตีไม่ได้เก็บไว้ระหว่างเซสชันเทอร์มินัลบน Mac


33

ประวัติทุบตีของฉันหยุดทำงานอย่างลึกลับและฉันไม่รู้ว่าจะแก้ไขได้อย่างไร นี่คือสิ่งที่. bashrc ของฉันดูเหมือนว่า:

HISTSIZE=500
HISTFILESIZE=500
HISTFILE=$HOME/.bash_history

แต่เมื่อฉันใช้มันพิมพ์ออกecho $HISTFILE/Users/myusername/.bash_sessions/EE8689E5-7DAD-4018-817E-0AF1DE36082A.historynew

ฉันเป็นเจ้าของไฟล์. bash_history ดังนั้นฉันจึงไม่แน่ใจว่าจะแก้ไขปัญหานี้อย่างไร

ขอบคุณ!


สวัสดีเนลสันยินดีต้อนรับสู่ Super User ตรวจสอบอย่างรวดเร็ว - ช่องว่างเหล่านั้นถูกแทรกโดยคุณ?
bertieb

ใช่พวกเขาฉันจะลบพวกเขาและรายงานกลับ

@bertieb ฉันได้ลบช่องว่างออกแล้วและตอนนี้ $ HISTFILESIZE ได้รับการสะท้อนอย่างถูกต้อง อย่างไรก็ตามประวัติยังไม่ได้บันทึกและ $ HISTFILE จะพิมพ์ไฟล์ประวัติชั่วคราวที่แปลก (ซึ่งฉันสมมติว่าเก็บประวัติสำหรับเซสชั่นนั้น)

คุณกำลังพยายามที่จะเปลี่ยน$HISTFILEออกจากความสนใจ? ฉันไม่มี.bashrcOSX และecho $HISTFILEรายงานสถานที่ที่ฉันคาดหวัง - การแสดงความคิดเห็นในบรรทัดที่มีปัญหาจะมีผลกระทบใด ๆ หรือไม่
bertieb

1
อ้างอิงการขยายตัวแปรชื่อพา ธ เสมอ: HISTFILE="$HOME/.bash_history”. หากไม่มีเครื่องหมายอัญประกาศเวอร์ชันของคุณจะไม่ถูกต้องหากเส้นทางไปยังไดเรกทอรีบ้านของคุณมีช่องว่าง (หรืออักขระพิเศษอื่น ๆ )
Chris Page

คำตอบ:


26

เทอร์มินัลจะกำหนดตัวระบุที่ไม่ซ้ำกันแต่ละเซสชันและสื่อสารผ่านตัวแปรสภาพแวดล้อม TERM_SESSION_ID เพื่อให้โปรแกรมที่ทำงานในเทอร์มินัลสามารถบันทึก / กู้คืนสถานะเฉพาะแอปพลิเคชันเมื่อออกและรีสตาร์ทเทอร์มินัล

โฟลเดอร์ใหม่ (~ / .bash_sessions /) ใช้เพื่อจัดเก็บไฟล์ HISTFILE และ. session ที่ไม่ซ้ำกับเซสชัน

ในระหว่างการเริ่มต้นเชลล์ไฟล์เซสชันจะถูกดำเนินการ ไฟล์เก่าจะถูกลบเป็นระยะ

พฤติกรรมเริ่มต้นจัดให้มีการบันทึกและเรียกคืนประวัติคำสั่ง bash อย่างอิสระสำหรับแต่ละเซสชันเทอร์มินัลที่เรียกคืน นอกจากนี้ยังรวมคำสั่งเข้ากับประวัติศาสตร์โลกสำหรับเซสชันใหม่

คุณสามารถปิดการทำงานนี้และแบ่งปันประวัติเดียวโดยการตั้งค่า

export SHELL_SESSION_HISTORY=0

หากมีการกำหนด HISTTIMEFORMAT ประวัติต่อเซสชันจะถูกปิดใช้งานตามค่าเริ่มต้น (อ่านเพิ่มเติมใน / private / etc / bashrc_Apple_Terminal)

กลไกการบันทึก / กู้คืนถูกปิดใช้งานหากไฟล์ต่อไปนี้มีอยู่:

~/.bash_sessions_disable

Apple ได้เปลี่ยนพฤติกรรมบางอย่างตั้งแต่ El Capitan เปิดตัวดังนั้นจึงเป็นการดีที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่ less /private/etc/bashrc_Apple_Terminal


3
แต่ไม่เพียงแค่เริ่มต้นด้วยการปิดใช้งานกลไกการบันทึก / กู้คืน หากคุณมีปัญหาเกี่ยวกับประวัติคำสั่งเชลล์ลองแก้ไขปัญหานั้น ~/.bash_sessions_disableไฟล์ที่มีความหมายเป็นที่พึ่งสุดท้ายในกรณีที่มีปัญหาที่ไม่สามารถแก้ไขได้โดยเฉพาะ มันปิดมากกว่าประวัติศาสตร์คำสั่งต่อเซสชันและคุณสามารถปิดการใช้งานเพียงประวัติศาสตร์คำสั่งต่อเซสชัน ดูความคิดเห็นใน/etc/bashrc_Apple_Terminalเพื่อดูรายละเอียด
Chris Page

1
@ChrisPage ที่จริง Apple เปลี่ยนสคริปต์บางส่วน อัปเดตคำตอบขอบคุณ
diimdeep

@diimdeep ฉันจะต่อท้ายบรรทัดนี้ที่ไหน? export SHELL_SESSION_HISTORY=0
zerohedge

@zerohedge .bashrcและ.bash_profile unix.stackexchange.com/a/310150/15362
diimdeep

@diimdeep ขอบคุณ ดูเหมือนว่าจะใช้งานได้ในขณะนี้ มันมีสาขาหรือไม่?
zerohedge

6

ฉันสังเกตเห็นสิ่งที่คล้ายกันหลังจากการอัพเกรด El Capitan เพียงเพิ่ม.bash_sessions_disableไฟล์ในไดเรกทอรีบ้านของคุณปิดการใช้งานเซสชันทุบตีใหม่และ.bash_historyกลับมาใช้งาน

เธรด Redditนี้มีข้อมูลเพิ่มเติมและลิงก์เพิ่มเติม


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

ขอบคุณคริส - มีอะไรอีกที่ปิดการใช้งานประวัติของฉันทำงานได้ตามที่คาดไว้ (เช่นเดียวกับ osx รุ่นก่อนหน้าและเหมือนกับ linux) ในช่วงสองสามเดือนที่ผ่านมา ไม่ทราบว่าทำไมพวกเขาเปลี่ยนมัน?
rabs

@rabs ฉันแนะนำให้เพิ่มที่ด้านบนของSHELL_SESSION_HISTORY=0 ~/.bash_profile
Teejay

5

คุณสามารถแก้ไขปัญหา RVM ได้โดยอัปเดตเป็นเวอร์ชัน RVM ล่าสุดหรือดำเนินการสิ่งนี้:

  echo 'shell_session_update' > $HOME/.bash_logout

ดูhttps://github.com/rvm/rvm/issues/3540สำหรับข้อมูลเพิ่มเติม


1
การแก้ไขที่ดีโดยไม่ต้องแก้ไข rvm
mlo55

1
เรากำลังพูดถึง Ruby enVironment Manager (RVM) rvm.io หรือไม่? เมื่อไหร่และทำไมจึงควรมีส่วนร่วม?
MarkHu

3

คำตอบจากกระทู้ Reddit นี้ช่วยฉัน:

อาจเป็น RVM ที่ป้องกันไม่ให้ "hook" ทางออกสำหรับ bash_sessions ทำงาน หากคุณใส่ความคิดเห็นในบรรทัดต่อไปนี้ใน. bash_profile ของคุณควรทำงานได้

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

นี้ช่วยได้แน่นอน!
Karsten

1

ถ้ามันเป็นของ Mac, ฉันคิดว่ามันเป็นเปลือกเข้าสู่ระบบเริ่มต้นคือbashและมันจะทำงานแทน.profile .bashrcดังนั้นคุณแก้ไขไฟล์ผิด


ฉันได้แก้ไขโปรไฟล์เพื่อให้เป็นเช่นเดียวกับ. bashrc ของฉันและประวัติยังคงไม่เกิดขึ้น

@NelsonLiu เกิดอะไรขึ้นเมื่อคุณสะท้อน$HISTFILEในส่วนต่าง ๆ ของprofile? บางทีคุณอาจจะเขียนสคริปต์อื่นที่เปลี่ยนแปลงตัวแปรหรือไม่ ฉันจะตรวจสอบทั้งในTerminalและiTerm, bash 3และทั้งสองมีค่าเริ่มต้นของพวกเขา4 $HOME/.bash_history
theoden

ฉันจะสะท้อน $ HISTFILE ในส่วนต่างๆของโปรไฟล์ได้อย่างไร

@NelsonLiu ไม่ชัดเจนหรือ เป้าหมายของคุณคือการติดตามเมื่อมี$HISTFILEการเปลี่ยนแปลง ดังนั้นเพียงทำให้สองecho $HISTFILEรอบรหัสของคุณ สิ่งที่คุณต้องทำคือการค้นหาชิ้นส่วนของรหัสที่มี$HISTFILEการเปลี่ยนแปลงโดยการย้ายทั้งสองecho $HISTFILEบรรทัดใกล้ชิดและใกล้ชิดกันมากขึ้นทีละบรรทัดจนกว่าสิ่งที่เปิดเผย นั่นคือทั้งหมดที่
theoden

1
ดังนั้นฉันจึงทำตามที่คุณสั่งและทำ. bash_profile เหมือนกับโปรไฟล์ ฉันตัดสินใจที่จะecho $HISTFILEทุกบรรทัดเพียงเพื่อดูว่ามีความแตกต่างใด ๆ อย่างไรก็ตามมันพิมพ์/Users/username/.bash_historyครั้งเดียวมากมาย จากนั้นฉันก็วิ่งเข้าไปecho $HISTFILEในเปลือกและมันก็แสดงผลออก/Users/nelsonliu/.bash_sessions/CD275A29-1DF1-4ED8-B8CE-F706B11B812F.historynewมา

0

ฉันเห็นปัญหานี้ใน High Sierra ยังไงก็ตาม. bash_history ของฉันเองก็กลายเป็นเจ้าของโดย root และไม่มีสิทธิ์อ่านสำหรับผู้ใช้รายอื่น (เมื่อเนื้อหาของโฮมไดเร็กตอรี่ดูด้วย ls -al)

ไม่มีสิ่งใดที่ตามมาในไฟล์. bash_history นี้ดังนั้นฉันจึงทำ sudo rm .bash_history แล้วตามด้วยการแตะ. bash_history เพื่อสร้างใหม่

ดูเหมือนทั้งหมดจะดีตอนนี้


สำหรับฉันมันไม่ได้เป็นสิทธิ์ของไฟล์มันเป็นเพราะฉันไม่ได้กำหนดตัวแปรควบคุม HIST ใด ๆ ต้องมีการกำหนดอย่างน้อยหนึ่งรายการ ฉันเพิ่มลงใน~/.bash_profileไฟล์ของฉัน:export HISTTIMEFORMAT='%F %T '
MarkHu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.