Cara membuat Terminal Mac mengembalikan direktori yang berfungsi saat memulai kembali


16

Saya menggunakan Terminal Mac dengan tangan penuh tab masing-masing ditugaskan ke direktori kerja yang berbeda. Saya telah mengonfigurasinya untuk membuka windows baru dengan direktori kerja yang sama. Namun demikian, ketika saya berhenti dari Terminal, dan me-restart itu membangun kembali semua tab, nama mereka, bahkan menunjukkan kepada saya output terakhir di jendela tetapi tetap di direktori home pengguna dan tidak mengembalikan direktori kerja terbaru dari setiap tab.

Apa yang saya lakukan salah? Bisakah ini disebabkan oleh beberapa pengaturan di ~/.bash_profile?


Saya pikir Anda dapat menemukan apa yang Anda cari di utas ini. apple.stackexchange.com/questions/863/...
dhempler

1
Jadi, apakah saya salah menganggap ini harus didukung di luar kotak?
Oliver Drotbohm

Jawaban:


15

(Untuk referensi, kita berbicara tentang fitur Lanjutkan dari Mac OS X Lion 10.7 dan yang lebih baru.)

Terminal secara otomatis mengembalikan direktori kerja jika Anda menggunakan shell default, bash. Jika Anda menggunakan beberapa shell lain, Anda perlu menyesuaikan kode /etc/bashrcuntuk mengirim urutan escape untuk mengkomunikasikan direktori yang berfungsi ke Terminal sehingga dapat mengembalikan direktori nanti untuk Resume. Jika Anda menggunakan zsh, lihat jawaban saya untuk Melanjutkan Zsh-Terminal (OS X Lion) , di mana saya memasukkan kode yang sesuai untuk zsh.

Jika Anda memiliki kebiasaan ~/.bash_profileatau ~/.bashrcAnda mungkin perlu memastikan bahwa Anda tidak membatalkan perilaku default dengan memodifikasi /etc/bashrckustomisasi. Secara khusus, ini mengatur PROMPT_COMMANDvariabel lingkungan untuk mengirim urutan escape pada setiap prompt. Jika Anda mengkustomisasi variabel itu, Anda harus awalan atau menambahkan kode Anda ke nilai saat ini, misalnya:

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

Juga, secara umum, ~/.bash_profileharus menjalankan ~/.bashrc:

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

1
Terima kasih atas jawabannya, tetapi sepertinya saya tidak bisa membuatnya bekerja. Saya telah menghapus .bashrc(walaupun saya tidak dapat menemukan kustomisasi perintah prompt. Sekarang saya melakukan yang berikut: 1. Buka jendela Terminal baru (buka di direktori home pengguna saya) 2. Dokumen cd 3. Terminal Keluar 4. Terminal Terbuka 5 Window dibuka kembali menampilkan output perubahan direktori tetapi masih terletak di direktori home pengguna
Oliver Drotbohm

@OliverGierke Terminal menciptakan kerang login, jadi juga memeriksa ~/.bash_profile, ~/.bash_logindan ~/.profile.
Chris Page

Saya tidak memiliki dua yang terakhir, yang pertama dijalankan ~/.bashrcsesuai saran Anda dalam jawaban Anda.
Oliver Drotbohm

2
Saya mengerti, Chris. /etc/bashrcSepertinya saya telah di-tweak oleh skrip instalasi atau apa pun. Ada /etc/bashrc.origyang berisi beberapa konfigurasi tambahan (yang saya anggap sebagai pengaturan asli) gist.github.com/3273170 . Menambahkan kembali itu ke /etc/bashrchal-hal yang dibuat bekerja seperti yang diharapkan lagi. Terima kasih banyak atas bantuan dan kesabarannya!
Oliver Drotbohm

Saya tidak mengubah $ PROMPT_COMMAND di .bashrc saya dan saya hanya memiliki sistem default /etc/bashrc. Ada saran lebih lanjut?
Richard

3

Jika Anda menggunakan Bash-It, Anda mungkin mengalami masalah $PROMPT_COMMANDkarena ditimpa olehnya.

Seperti disebutkan itu digunakan oleh OS X untuk mengembalikan cwd di tab baru. Bash itu harus menambahkan nilai, bukan menimpanya.

Tetapi solusi untuk saat ini adalah menambahkan baris berikut ke blog Anda ~/.bash_profile

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

Untuk info lebih lanjut, periksa pelacak masalah untuk pembaruan: https://github.com/revans/bash-it/issues/240

Dan referensi Apple untuk itu https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html


1

Saya menulis posting blog tentang cara melakukan ini untuk csh / tcsh sebelum saya menemukan jawaban ini; jika ada orang lain datang ke sini mencari solusi untuk kerang itu, ini dia:

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

Tambahkan itu ke Anda .cshrcatau yang .tcshrcsesuai. (Pernyataan luar jika diperlukan untuk menghindari kesalahan ketika masuk secara jarak jauh, seperti halnya dengan ssh. Pernyataan ini harus merupakan pernyataan terpisah karena aturan ekspansi variabel di tcsh.)

Seperti dukungan bash bawaan Apple, solusi ini tidak menggunakan program eksternal selain printf, dengan biaya hanya melarikan diri ruang. Jika Anda perlu keluar dari karakter khusus lainnya, Anda harus bekerja sedikit lebih keras untuk menemukan solusi yang lebih komprehensif.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.