Як змусити Mac Terminal відновлювати робочі каталоги при перезапуску


16

Я використовую Mac Terminal з рукою, повної вкладок, кожна з яких присвоєна іншому робочому каталогу. Я налаштував його для відкриття нових вікон з тим же робочим каталогом. Тим не менш, коли я закриваю термінал і перезавантажую його, він відновлює всі вкладки, їхні імена, навіть показує мені останній висновок у вікні, але залишається в домашньому каталозі користувача та не відновлює останню робочу директорію кожної вкладки.

Що я роблю неправильно? Це може бути викликано деякими налаштуваннями в ~/.bash_profile?


Я думаю, ви можете знайти те, що шукаєте в цій темі. apple.stackexchange.com/questions/863/…
dhempler

1
Тож я помиляюся, вважаючи, що це слід підтримувати поза рамками?
Олівер Дротбом

Відповіді:


15

(Для довідки ми говоримо про функцію відновлення Mac OS X Lion 10.7 та новіших версій.)

Термінал автоматично відновлює робочий каталог, якщо ви використовуєте оболонку за замовчуванням, bash. Якщо ви використовуєте якусь іншу оболонку, вам потрібно буде адаптувати код, /etc/bashrcщоб надіслати послідовність обходу для передачі робочого каталогу терміналу, щоб він міг відновити каталог пізніше для Resume. Якщо ви використовуєте 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. Відкрийте нове вікно терміналу (відкривається в домашній довідці мого користувача) 2. cd Документи 3. Вийдіть з терміналу 4. Відкрийте термінал 5 . Вікно знову відкриває відображення результатів зміни каталогів, але все ще знаходиться в домашньому каталозі користувача
Олівер Дротбом

@OliverGierke термінал створює реєстраційні оболонки, так і перевірити ~/.bash_profile, ~/.bash_loginі ~/.profile.
Кріс Пейдж

Останніх двох у мене немає, колишній виконується ~/.bashrcза вашою пропозицією у вашій відповіді.
Олівер Дротбом

2
Я зрозумів це, Кріс. Моя, /etc/bashrcздається, була підроблена сценарієм встановлення або будь-яким іншим. Було таке, /etc/bashrc.origщо містило деяку додаткову конфігурацію (яку я вважаю оригінальною установкою) gist.github.com/3273170 . Повторне додавання, що до /etc/bashrcзроблених речей знову працювати, як очікувалося. Дякую за допомогу та терпіння!
Олівер Дротбом

Я не змінюю $ PROMPT_COMMAND у своєму .bashrc, і у мене є лише системний стандарт / etc / bashrc. Будь-які додаткові пропозиції?
Річард

3

Якщо ви використовуєте Bash-It, у вас може виникнути проблема $PROMPT_COMMANDперезапису.

Як вже згадувалося, він використовується OS X для відновлення cwd у нових вкладках. Bash він повинен додавати значення, а не змінювати їх.

Але вирішенням на даний момент було б додати наступний рядок до свого ~/.bash_profile

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

Щоб отримати додаткові відомості, відвідайте програму відстеження проблем оновлень: https://github.com/revans/bash-it/isissue/240

І посилання Apple на це 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якщо потрібно. (Зовнішній випадок, якщо оператор необхідний, щоб уникнути помилки при віддаленому вході в систему, як і в ssh. Це має бути окремим оператором через правила змінної розширення в tcsh.)

Як і вбудована в Apple підтримка bash, це рішення не використовує жодних зовнішніх програм, окрім printfяк лише пробігаючі місця. Якщо вам потрібно уникнути інших спеціальних персонажів, вам доведеться трохи більше працювати, щоб знайти більш комплексне рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.