Я нахожу особенно полезными на ноутбуках для хранения открытым (гном-) терминалы (и в конечном счете другие приложения), выходя из системы / выключение; я думаю, что это было значением по умолчанию в некоторой более старой версии Xubuntu, которую я имел. В особенности я хотел бы сохранить открытым все терминальные вкладки в том же каталоге как на предыдущей сессии: существует ли способ сделать это?
Я проверил это:
но кажется, что это не относится к путям в терминалах.
У меня есть Gnome/единица на Ubuntu 14.04, но KDE имеет тот же предел.
Изучив несколько приемов за эти годы, я предложил другое решение, которое могло бы быть немного более нормальным, чем исходная идея, что можно все еще найти ниже. В соответствии со статьей 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
в Вашей домашней папке.
Примечания:
.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 (т.е. бывший в спящем режиме) лучше.