Mac Terminali yeniden başlatırken çalışma dizinlerini geri yükleme


15

Mac Terminalini, her biri farklı bir çalışma dizinine atanan sekmelerle dolu bir el ile kullanıyorum. Aynı çalışma diziniyle yeni pencereler açacak şekilde yapılandırdım. Yine de, Terminal'den çıktığımda ve yeniden başlattığımda tüm sekmeleri yeniden oluşturuyor, isimleri, hatta penceredeki son çıktısını gösteriyor, ancak kullanıcı giriş dizininde kalıyor ve her sekmenin en son çalışma dizinini geri yüklemiyor.

Neyi yanlış yapıyorum? Bu, ayardaki bazı ayarlardan kaynaklanabilir mi? ~/.bash_profile?


Sanırım bu konudaki aradığınızı bulabilirsin. apple.stackexchange.com/questions/863/...
dhempler

1
Öyleyse bunun kutudan desteklenmesi gerektiğini varsaymakta yanlış mıyım?
Oliver Drotbohm

Yanıtlar:


14

(Başvuru için, Mac OS X Lion 10.7 ve sonraki sürümlerin Devam Et özelliği hakkında konuşuyoruz.)

Varsayılan kabuk kullanıyorsanız, Terminal çalışma dizinini otomatik olarak geri yükler. Başka bir kabuk kullanıyorsanız, koddaki kodu adapte etmeniz gerekir. /etc/bashrc Çalışma dizinini Terminal'e iletmek için bir kaçış dizisi göndermek için, böylece devam ettirmek üzere dizini geri yükleyebilir. Eğer zsh kullanıyorsanız, cevabımı görün. Zsh Terminaline Devam Et (OS X Lion) zsh için uygun kodu ekliyorum.

Bir özel varsa ~/.bash_profile veya ~/.bashrc Varsayılan davranışı değiştirerek geri almadığınızdan emin olmalısınız /etc/bashrc Özelleştirmeleri. Özellikle, PROMPT_COMMAND Her istemde kaçış dizisini göndermek için ortam değişkeni. Bu değişkeni özelleştirirseniz, kodunuzu geçerli değere ön eklemeniz veya eklemeniz gerekir;

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

Ayrıca, genel olarak, ~/.bash_profile yürütmeli ~/.bashrc:

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

1
Cevabınız için teşekkürler ama bu işe yaramayacak gibi görünüyor. Kaldırdım .bashrc (herhangi bir komut istemi belirleyemesem de. Şimdi aşağıdakileri yapıyorum: 1. Yeni bir Terminal penceresi açın (kullanıcımın ana dizininde açılır) 2. cd Belgeler 3. Terminalden Çıkın 4. Terminali Açın 5. Pencere yeniden açılır dizin çıktıyı değiştirir ancak yine de kullanıcının giriş dizininde bulunur.
Oliver Drotbohm

@OliverGierke Terminal giriş kabukları oluşturur, bu yüzden de kontrol ~/.bash_profile, ~/.bash_login, ve ~/.profile.
Chris Page

İkinci ikisine sahip değilim, eski şimdi yürütür ~/.bashrc Cevabınızdaki önerinize göre.
Oliver Drotbohm

2
Anladım Chris. Benim /etc/bashrc kurulum betiği veya başka bir şey tarafından ince ayarlanmış gibi görünüyor. Bir vardı /etc/bashrc.orig bazı ek yapılandırmalar içeren (orijinal kurulum olarak kabul ediyorum) gist.github.com/3273170 . Bunu tekrar eklemek /etc/bashrc işlerin tekrar beklendiği gibi çalışmasını sağladı. Yardım ve sabır için çok teşekkür ederiz!
Oliver Drotbohm

Benim .bashrc içinde $ PROMPT_COMMAND değiştirmiyorum ve sadece / default / etc / bashrc sistem var. Başka bir önerin var mı?
Richard

3

Bash-It kullanıyorsanız, $PROMPT_COMMAND üzerine yazılmış olmak.

Belirtildiği gibi, OS X tarafından cwd'yi yeni sekmelerde geri yüklemek için kullanılır. Bash değerleri geçersiz kılmamalı, değer eklemeli.

Ancak şimdilik bir geçici çözüm aşağıdaki satırları telefonunuza eklemek olacaktır. ~/.bash_profile

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

Daha fazla bilgi için güncellemeler için sorun izleyiciyi kontrol edin: https://github.com/revans/bash-it/issues/240

Ve bunun için Apple referansı https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html


1

Ben yazdım Blog yazısı Bu cevabı keşfetmeden önce bunu csh / tcsh için nasıl yapacağım; buraya bu kabukları için bir çözüm arayan biri gelirse, işte burada:

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

Şunu ekle .cshrc veya .tcshrc uygun. (Ssh ile olduğu gibi uzaktan giriş yaparken bir hatayı önlemek için dış if ifadesi gereklidir.

Apple'ın yerleşik bash desteği gibi, bu çözüm de harici hiçbir program kullanmıyor printf, sadece kaçış mahalleri pahasına. Diğer özel karakterlerden kaçmanız gerekirse, daha kapsamlı bir çözüm bulmak için biraz daha çok çalışmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.