Как я могу открыть новый терминал в том же каталоге последнего используемого из менеджера окон keybind?

Windows имеет тенденцию изменяться очень медленно и дает шанс авторам вируса/троянца предназначаться для очень определенных ошибок на двоичных файлах Windows или двоичных файлах из приложений сторонних производителей.

Путем GNU/дистрибутивы Linux сделан, делает особенно трудным для вирусов использовать уязвимости (когда доступный).

Как указано Gilles, можно быть в безопасности путем форматирования SD-карты из Linux Живой CD.

25
24.02.2012, 01:21
8 ответов

Я вижу три решения использовать .last_dir. Можно поместить echo $PWD > ~/.last_dir также:

  1. В специальной функции, которая была бы оберткой для cd:

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }
    

    Поместите это в Ваш ~/.bashrc и затем используйте cd_ вместо CD каждый раз Вы хотите, чтобы Ваш новый рабочий каталог был сохранен.

  2. В Вашем $PROMPT_COMMAND (не рекомендуемый):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"
    

    Можно протестировать это непосредственно от терминала или поместить его в ~/.bashrc. Это решение, однако, инициировало запись на диск каждый раз, когда подсказка появляется, который мог бы доставить неприятности - но с другой стороны, .last_dir содержал бы текущий каталог, неважно, как Вы добрались там.

  3. В пользовательском сценарии расширения жемчуга для rxvt. Я никогда не создавал тот сам, но можно найти довольно много примеров в сети.

9
27.01.2020, 19:40
  • 1
    PROMPT_COMMAND это - то, что я искал. Я попробую это решение, надеясь, что оно не влияет на действия. –  Luca 23.02.2012, 21:25
  • 2
    фиксации ну, это - довольно сырой путь, откровенно. Лично, мне нравится решение Michael лучший :) –  rozcietrzewiacz 23.02.2012, 21:33
  • 3
    , мне нравится расширение жемчуга путь, если это должно работать за пределами терминала; это кажется инструментом для очистки, чем взламывание чего-то в PROMPT_COMMAND, одна из наиболее злоупотребленных переменных среды всего времени –  Michael Mrozek♦ 23.02.2012, 21:37
  • 4
    Кажется, что $PWD оценен только в первый раз... Прошу прощения. Проблема с с тем, как PROMPT_COMMAND заключается в кавычки. (Или скорее как $PWD не был заключен в кавычки.) Позволяют мне зафиксировать это... Там. Это должно сделать это. –  rozcietrzewiacz 23.02.2012, 23:33

Это на самом деле довольно тривиально; если Вы работаете urxvt из Вашего существующего urxvt окно, новое окно будет в том же каталоге. Я имею dup искаженный к urxvt & поэтому. Если Вы хотите связанный с горячей клавишей, можно использовать удар bind команда. Например, для привязки его с F1:

$ bind '"\e[11~": "urxvt &\n"'
12
27.01.2020, 19:40
  • 1
    Спасибо за подсказку. Я знал, что терминальные дочерние процессы поддержали состояние, но я не знал, что можно связать ключ к команде в ударе. Я хотел бы сделать это от WM, чтобы не фокусировать терминал. –  Luca 23.02.2012, 21:12
  • 2
    мне нравится этот. Никакие записи на диск и единственное выполнение не происходят, когда Вы собираетесь открыть новый терминал. –  rozcietrzewiacz 23.02.2012, 21:14
  • 3
    Единственная вещь, которую я изменил бы, состоит в том, чтобы использовать ( urxvt & ) &>/dev/null вместо просто фоновой обработки. –  rozcietrzewiacz 23.02.2012, 21:17
  • 4
    Это решение является отличным и более гибким, но мне не нравится использовать 2 привязки, один для запуска терминала и один для разветвления нового. –  Luca 23.02.2012, 21:46

Я в настоящее время использую эту версию решения № 1

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

в моем .zshrc

13
27.01.2020, 19:40
  • 1
    я использую решение № 1 также и добавляю trap "[ -f ~/.last_dir ] && rm ~/.last_dir" EXIT я хочу, всегда запускаются в моем доме кроме тех случаев, когда я открываю новую вкладку –  rkmax 13.07.2013, 00:18

Просто добавьте . /etc/profile.d/vte.sh в Вашем ~/.bashrc получить ту же функцию

4
27.01.2020, 19:40

Конечно, это рабочий подход к модификации поведения cd, но я хотел бы показать более простое решение. В man bash(1) я обнаружил, что если интерактивный выходит, то запускается ~/.bash_logout, если он существует. Таким образом, вместо того, чтобы хранить путь при каждом вызове cd, последний путь может быть сохранен при выходе.

Мой ~/.bash_logout очень прост:

echo $PWD >~/.lastdir

И где-то в моем .bashrc я поместил эту строку:

[ -r ~/.lastdir ] && cd $(<~/.lastdir)
4
27.01.2020, 19:40

Очень часто я использую сразу несколько терминальных окон, каждое из которых имеет несколько вкладок. Например: одно окно для вкладок разработки исходного кода, одно окно для файлов латекса, одно окно для выполнения R и скриптинга и т.д. В одном окне я хочу, чтобы новый терминал с вкладками поменялся на каталог, который используется последним в этом конкретном окне (раньше это работало, но с новой версией gnome это почему-то не работает). Следующее грязное решение мне подходит. Я поместил это в .bashrc.

dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] &&  {
    savdir=`cat $dirfilename`
    cd "$savdir"
}

function cd ()
{
    builtin cd "$@"
    echo $PWD > $dirfilename
}
2
27.01.2020, 19:40

Вставьте это в ~/.bashrc, (или ~/.zshrc, если вы используете zsh ).

set_working_dir() {
  # All terminals after this command, will be opened in your current directory.
  for var in "$@"
  do
    echo "$var" > ~/.cache/.last_dir 
  done
    if [ $# -eq 0 ]
  then
    pwd > ~/.cache/.last_dir
    fi
  echo '* Working directory saved.'
}
alias sdw='set_working_dir'

Перезагрузитесь, и вы можете использовать его как:

swd

или

swd "/some/directory"

Затем запустите терминал, например:

nameofyourterminal --working-directory=$(cat ~/.cache/.last_dir)
-1
04.06.2020, 22:45

В zsh можно использовать хуки:

chpwd_functions=(${chpwd_functions[@]} "function-that-saves-pwd")
0
18.04.2021, 13:44

Теги

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