วิธีทำให้ Mac Terminal คืนค่าไดเรกทอรีทำงานเมื่อรีสตาร์ท


16

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

ผมทำอะไรผิดหรือเปล่า? สิ่งนี้อาจเกิดจากการตั้งค่าบางอย่างใน~/.bash_profile?


ฉันคิดว่าคุณสามารถค้นหาสิ่งที่คุณกำลังมองหาในหัวข้อนี้ apple.stackexchange.com/questions/863/…
dhempler

1
ดังนั้นฉันผิดที่สมมติว่าควรได้รับการสนับสนุนนอกกรอบนี้หรือไม่
Oliver Drotbohm

คำตอบ:


15

(สำหรับการอ้างอิงเรากำลังพูดถึงคุณสมบัติ Resume ของ Mac OS X Lion 10.7 ขึ้นไป)

เทอร์มินัลจะกู้คืนไดเรกทอรีทำงานโดยอัตโนมัติหากคุณใช้เชลล์เริ่มต้นทุบตี หากคุณใช้เชลล์ตัวอื่นคุณจะต้องปรับเปลี่ยนรหัส/etc/bashrcเพื่อส่งลำดับการหลีกเลี่ยงเพื่อสื่อสารไดเรกทอรีทำงานไปที่ Terminal เพื่อให้สามารถเรียกคืนไดเรกทอรีในภายหลังเพื่อดำเนินการต่อ หากคุณกำลังใช้ zsh โปรดดูคำตอบของฉันต่อResume Zsh-Terminal (OS X Lion)ซึ่งฉันใส่รหัสที่เหมาะสมสำหรับ zsh ด้วย

หากคุณมีกำหนดเอง~/.bash_profileหรือ~/.bashrcคุณอาจต้องตรวจสอบให้แน่ใจว่าคุณไม่ได้เลิกทำพฤติกรรมเริ่มต้นด้วยการปรับเปลี่ยนการ/etc/bashrcปรับแต่งของ โดยเฉพาะอย่างยิ่งมันตั้งค่าPROMPT_COMMANDตัวแปรสภาพแวดล้อมเพื่อส่งลำดับหนีที่แต่ละพรอมต์ หากคุณปรับแต่งตัวแปรนั้นคุณจะต้องนำหน้าหรือต่อท้ายรหัสของคุณเป็นค่าปัจจุบันเช่น:

PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"

นอกจากนี้โดยทั่วไป~/.bash_profileควรดำเนินการ~/.bashrc:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

1
ขอบคุณสำหรับคำตอบ แต่ฉันดูเหมือนจะไม่สามารถทำงานได้ ฉันได้ลบของฉัน.bashrc(แม้ว่าฉันไม่สามารถมองเห็นการปรับแต่งคำสั่งใด ๆ ตอนนี้ฉันทำต่อไปนี้: 1. เปิดหน้าต่าง Terminal ใหม่ (เปิดในไดเรกทอรีบ้านของผู้ใช้ของฉัน) 2. cd Documents 3. ออกจาก Terminal 4 . หน้าต่างจะเปิดใหม่อีกครั้งเพื่อแสดงผลลัพธ์ของการเปลี่ยนได
เร็กตอรี่

เทอร์มิ @OliverGierke สร้างเปลือกหอยเข้าสู่ระบบเพื่อตรวจสอบให้~/.bash_profile, และ~/.bash_login ~/.profile
Chris หน้า

ฉันไม่ได้มีสองหลังอดีตตอนนี้ดำเนินการ~/.bashrcตามคำแนะนำของคุณในคำตอบของคุณ
Oliver Drotbohm

2
ฉันเข้าใจแล้วว่าคริส /etc/bashrcดูเหมือนว่าฉันจะได้รับการปรับแต่งโดยสคริปต์การติดตั้งหรืออะไรก็ตาม มี/etc/bashrc.origที่มีบางส่วนตั้งค่าเพิ่มเติม (ซึ่งผมถือว่าเป็นการติดตั้งเดิม) gist.github.com/3273170 เพิ่ม/etc/bashrcอีกครั้งในสิ่งที่ทำให้การทำงานตามที่คาดไว้อีกครั้ง ขอบคุณมากสำหรับความช่วยเหลือและความอดทน!
Oliver Drotbohm

ฉันไม่เปลี่ยน $ PROMPT_COMMAND ใน. bashrc ของฉันและฉันมีเพียงค่าเริ่มต้นของระบบ / etc / bashrc มีข้อเสนอแนะเพิ่มเติมหรือไม่
Richard

3

หากคุณใช้ Bash-It คุณอาจพบปัญหาใน$PROMPT_COMMANDการเขียนทับโดยมัน

ตามที่กล่าวไว้แล้วระบบจะใช้ OS X เพื่อกู้คืน cwd ในแท็บใหม่ ทุบตีมันควรจะผนวกค่าไม่ได้แทนที่พวกเขา

แต่วิธีแก้ปัญหาในตอนนี้คือการเพิ่มบรรทัดต่อไปนี้ในของคุณ ~/.bash_profile

source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"

สำหรับข้อมูลเพิ่มเติมชำระเงินตัวติดตามปัญหาสำหรับการอัปเดต: https://github.com/revans/bash-it/issues/240

และแอปเปิลอ้างอิงมัน https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html


1

ฉันเขียนบทความในบล็อกเกี่ยวกับวิธีการทำสิ่งนี้กับ csh / tcsh ก่อนที่ฉันจะค้นพบคำตอบนี้ ถ้าใครมาที่นี่เพื่อหาทางออกให้กับหอยเหล่านั้นนี่คือ:

if ("$?TERM_PROGRAM") then
  if ("$TERM_PROGRAM" == "Apple_Terminal") then
    alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
  endif
endif

เพิ่มที่ของคุณ.cshrcหรือ.tcshrcตามความเหมาะสม (คำสั่ง outer if จำเป็นต้องหลีกเลี่ยงข้อผิดพลาดเมื่อเข้าสู่ระบบจากระยะไกลเช่นเดียวกับ ssh จะต้องมีคำสั่งแยกต่างหากเนื่องจากกฎการขยายตัวตัวแปรใน tcsh.)

เช่นเดียวกับการสนับสนุนทุบตีของ Apple โซลูชันนี้ไม่ใช้โปรแกรมภายนอกอื่นนอกจากprintfค่าใช้จ่ายในการยกเว้นช่องว่างเท่านั้น หากคุณต้องการหลบหนีตัวละครพิเศษอื่น ๆ คุณจะต้องทำงานหนักขึ้นเล็กน้อยเพื่อค้นหาโซลูชันที่ครอบคลุมยิ่งขึ้น

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