Cách tạo Mac Terminal khôi phục thư mục làm việc khi khởi động lại


16

Tôi sử dụng Mac Terminal với một tay chứa đầy các tab được gán cho một thư mục làm việc khác nhau. Tôi đã cấu hình nó để mở các cửa sổ mới với cùng thư mục làm việc. Tuy nhiên, khi tôi thoát Terminal và khởi động lại, nó sẽ xây dựng lại tất cả các tab, tên của chúng, thậm chí còn hiển thị cho tôi đầu ra cuối cùng trong cửa sổ nhưng vẫn ở trong thư mục nhà của người dùng và không khôi phục thư mục làm việc mới nhất của mỗi tab.

Tôi đang làm gì sai? Điều này có thể được gây ra bởi một số thiết lập trong ~/.bash_profile?


Tôi nghĩ rằng bạn có thể tìm thấy những gì bạn đang tìm kiếm trong chủ đề này. apple.stackexchange.com/questions/863/ Cách
dhempler

1
Vì vậy, tôi có sai khi cho rằng điều này nên được hỗ trợ ra khỏi hộp?
Oliver Drotbohm

Câu trả lời:


15

(Để tham khảo, chúng tôi đang nói về tính năng Resume của Mac OS X Lion 10.7 trở lên.)

Terminal tự động khôi phục thư mục làm việc nếu bạn đang sử dụng shell mặc định, bash. Nếu bạn đang sử dụng một số shell khác, bạn sẽ cần điều chỉnh mã /etc/bashrcđể gửi một chuỗi thoát để liên lạc thư mục làm việc với Terminal để nó có thể khôi phục thư mục sau cho Resume. Nếu bạn đang sử dụng zsh, hãy xem câu trả lời của tôi cho Resume Zsh-Terminal (OS X Lion) , trong đó tôi bao gồm mã thích hợp cho zsh.

Nếu bạn có một tùy chỉnh ~/.bash_profilehoặc ~/.bashrcbạn có thể cần đảm bảo rằng bạn không hoàn tác hành vi mặc định bằng cách sửa đổi /etc/bashrccác tùy chỉnh của mình. Cụ thể, nó đặt PROMPT_COMMANDbiến môi trường để gửi chuỗi thoát tại mỗi dấu nhắc. Nếu bạn tùy chỉnh biến đó, bạn sẽ cần thêm tiền tố hoặc nối mã của mình vào giá trị hiện tại, ví dụ:

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

Ngoài ra, nói chung, ~/.bash_profilenên thực hiện ~/.bashrc:

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

1
Cảm ơn đã trả lời nhưng dường như tôi không thể làm việc đó. Tôi đã xóa .bashrc(mặc dù tôi không thể phát hiện bất kỳ tùy chỉnh lệnh nhắc nào. Bây giờ tôi thực hiện như sau: 1. Mở cửa sổ Terminal mới (mở trong thư mục chính của người dùng của tôi) 2. Tài liệu cd 3. Thoát Terminal 4. Mở Terminal 5 Cửa sổ mở lại hiển thị đầu ra thay đổi thư mục nhưng vẫn nằm trong thư mục chính của người dùng.
Oliver Drotbohm

@OliverGierke ga tạo vỏ đăng nhập, vì vậy cũng kiểm tra ~/.bash_profile, ~/.bash_login~/.profile.
Chris Trang

Tôi không có hai cái sau, cái trước bây giờ thực thi ~/.bashrctheo đề nghị của bạn trong câu trả lời của bạn.
Oliver Drotbohm

2
Tôi hiểu rồi, Chris. My /etc/bashrcdường như đã được điều chỉnh bởi một kịch bản cài đặt hoặc bất cứ điều gì. Có một /etc/bashrc.origcấu hình có chứa một số cấu hình bổ sung (mà tôi giả sử là thiết lập ban đầu) gist.github.com/3273170 . Thêm lại điều đó để /etc/bashrclàm cho mọi thứ hoạt động như mong đợi một lần nữa. Cảm ơn rất nhiều vì sự giúp đỡ và kiên nhẫn!
Oliver Drotbohm

Tôi không thay đổi $ PROMPT_COMMAND trong .bashrc của mình và tôi chỉ có hệ thống mặc định / etc / bashrc. Bất kỳ đề nghị thêm?
Richard

3

Nếu bạn đang sử dụng Bash-It, bạn có thể gặp phải vấn đề $PROMPT_COMMANDbị ghi đè bởi nó.

Như đã đề cập, nó được OS X sử dụng để khôi phục cwd trong các tab mới. Bash nó nên nối các giá trị, không ghi đè lên chúng.

Nhưng một cách giải quyết bây giờ sẽ là thêm dòng sau vào ~/.bash_profile

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

Để biết thêm thông tin, hãy kiểm tra trình theo dõi sự cố để cập nhật: https://github.com/revans/bash-it/issues/240

Và tài liệu tham khảo của Apple cho nó https://developer.apple.com/l Library / mac / document / darwin / report / manpages / man1 / sh.1.html


1

Tôi đã viết một bài đăng trên blog về cách làm điều này cho csh / tcsh trước khi tôi phát hiện ra câu trả lời này; nếu có ai khác đến đây để tìm giải pháp cho những cái vỏ đó, thì đây là:

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

Thêm vào đó .cshrchoặc của bạn .tcshrckhi thích hợp. (Câu lệnh if bên ngoài là cần thiết để tránh lỗi khi đăng nhập từ xa, như với ssh. Nó phải là một câu lệnh riêng vì các quy tắc mở rộng biến trong tcsh.)

Giống như hỗ trợ bash dựng sẵn của Apple, giải pháp này không sử dụng các chương trình bên ngoài nào khác printf, với chi phí chỉ thoát khỏi không gian. Nếu bạn cần thoát khỏi các nhân vật đặc biệt khác, bạn sẽ phải nỗ lực hơn một chút để tìm ra giải pháp toàn diện hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.