хранение открытых терминалов (с предыдущим путем) и приложения в единице Ubuntu

Я нахожу особенно полезными на ноутбуках для хранения открытым (гном-) терминалы (и в конечном счете другие приложения), выходя из системы / выключение; я думаю, что это было значением по умолчанию в некоторой более старой версии Xubuntu, которую я имел. В особенности я хотел бы сохранить открытым все терминальные вкладки в том же каталоге как на предыдущей сессии: существует ли способ сделать это?

Я проверил это:

http://www.howtogeek.com/203952/how-to-automatically-remember-running-applications-from-your-last-session-in-ubuntu-14.04/

но кажется, что это не относится к путям в терминалах.

У меня есть Gnome/единица на Ubuntu 14.04, но KDE имеет тот же предел.

3
задан 5 May 2015 в 18:43

1 ответ

захват Статуса выхода

Изучив несколько приемов за эти годы, я предложил другое решение, которое могло бы быть немного более нормальным, чем исходная идея, что можно все еще найти ниже. В соответствии со статьей Signal Trap о Wiki Gregg, "В ударе или ksh (только некоторые реализации) сценарий, прерывание ВЫХОДА выполняется на любом выходе, сообщенном или нет". Так обнаруживая и обрабатывая выход через Ctrl+d, exit команда, kill <shell_pid> возможно через trap "command" EXIT метод. По сути, мы можем использовать это, чтобы записать текущий рабочий каталог во время выхода и затем восстановить, чем через функцию оболочки. Код ниже делает точно это. Объяснение некоторых особых условий представлено в комментариях. Код использует ЗАВЕРШЕННЫЙ ПУСТЫМ УКАЗАТЕЛЕМ путь для обработки трудных путей и cd . для проверки несвязанных каталогов (на самом деле существует больше чем одно использование для cd ., посмотрите, что связанный вопрос Делает CD. имеет использование?), и проверка, если зарегистрированный каталог все еще существует для навигации к нему.

# This part will be triggered when shell exits.
# cd . is necessary as check for unlinked or renamed directories
# we have to avoid printf "$(pwd)\0" because process substitution spawns subshell
# with cwd set to user's home, which makes saving current working directory pointless
# We could use `/bin/pwd`, but just in case system is non-POSIX compliant and doesn't have
# it we will just stick with shell built-in
trap "cd . && pwd > ~/.last_dir && printf '\0' >> ~/.last_dir" EXIT

# This part is for when shell starts
goback(){
    IFS= read -r lastdir < ~/.last_dir
    if [ -d "$lastdir"  ]; then
        cd "$lastdir"
    fi  
}

# Check if we've read ~/.bashrc in this session already
# just in case user runs `source ~/.bashrc`
if [ -z "$bashrc_read"  ]; then
    bashrc_read=1
    export bashrc_read
    goback
fi

То, что это все еще не обрабатывает, является вкладками, закрытыми в QTerminal или закрывших окнах.


Исходный ответ

TL; DR: создайте функцию, которая сохраняет вывод pwd управляйте в файл и затем используйте тот файл для запуска gnome-terminal с чем было в том файле как аргумент gnome-terminal --working-directory=.

Шаг 1: получение Вашего последнего каталога:

Рев является функцией savewd(для сохранения рабочий каталог), который необходимо поместить в конце Вашего /home/username/.bashrc или безотносительно емкостно-резистивного файла для любой оболочки Вы используете.

function savewd ()
{
    echo $(pwd) > ~/.lastdir
}

Затем, закажите телефонный разговор с этой функцией в своей подсказке PS1, снова - в Вашем .bashrc файле. Например, здесь является моим:

# Backslash is necessary. See
# https://askubuntu.com/questions/651871/why-is-my-function-not-re-evaluated-in-ps1
PS1=' \$(savewd) serg@ubuntu [\$(pwd)]
================================
$ '

Размещение функции в Вашу подсказку выполняет функцию каждый раз, когда Вы выполняете что-то в оболочке, даже просто нажимая Enter. Таким образом, каждый раз, когда Вы выполняете команду, Ваш текущий рабочий каталог сохраняется в названный файл .lastdir в Вашей домашней папке.

Примечания:

  1. это сохранит последний рабочий каталог Вашей последней открытой оболочки. При восстановлении терминала в том каталоге можно восстановить только один терминал, где Вы выполнили последнюю команду.
  2. .lastdir имеет ведущую точку, следовательно это - скрытый файл, который Вы не видите, если Вы не делаете ls -a или позвольте просмотреть скрытые файлы в своем файловом менеджере

Шаг 2: создайте сценарий восстановления

Откройте свой любимый текстовый редактор и создайте следующий сценарий ниже:

#!/bin/sh
# set -x
LASTDIR="$(cat /home/username/.lastdir)"
gnome-terminal --working-directory=$LASTDIR &

Теперь у Вас есть сценарий, который читает то, что было сохранено в .lastdir файл, и открывает терминал с содержанием .lastdir как рабочий каталог.

Примечание: не забывайте делать этот исполняемый файл сценария с chmod +x /path/to/script. Предпочтительно, этот сценарий должен быть в каталоге, который является частью Вашего $PATH переменная окружения. Узнайте больше о нем.

Шаг 3: создайте объект запуска

Теперь можно использовать тот сценарий для запуска каждый раз, когда Вы входите в систему. Можно добавить полный путь к сценарию в Приложения Запуска или создать a .desktop запись в Вашем /home/username/.config/autostart папка. Например, я лично создал бы файл /home/username/.config/autostart/gnome-term-restored.desktop со следующим содержанием:

[Desktop Entry]
Type=Application
Exec=/path/to/my/script.sh
Hidden=false
NoDisplay=false
Name=gnome-terminal-restored

Теперь каждый раз, когда Вы входите в, у Вас будет это .desktop выполненный, который назовет сценарий, который откроет терминал с последним рабочим каталогом последнего окна терминала, которое выполнило последнюю команду.

Можно также добавить полный путь к сценарию на шаге 2 как ярлык, на Settings -> Keyboard -> Shortcuts -> Custom -> + button.

Шаг 4

Наслаждайтесь им :)

Примечания: Это будет работать с входом в систему и. При использовании метода, который показывают в ссылке, которую Вы предоставили в своем вопросе, это могло бы повредиться, как, в зависимости от которого программы запущены сначала, это могло бы открыть терминал гнома в Вашем /home/username папка. Если Вы идете с методом сюда, я предлагаю всегда закрыть окна терминала перед выходом. Что касается сохранения команд, они уже сохраняются ударом, и можно рассмотреть их с history.

Другая идея состоит в том, чтобы отредактировать /usr/share/applications/gnome-terminal.desktop выполниться gnome-terminal --working-directory=$(cat /home/yourusername/.lastdir) или сценарий, который я записал, но я не рекомендую это.

По моему скромному мнению, способ, которым предлагает Fabby (т.е. бывший в спящем режиме) лучше.

1
ответ дан 1 December 2019 в 17:38

Другие вопросы по тегам:

Похожие вопросы: