WSL: Есть ли условие для обнаружения случая «Open Linux Shell Here»?

Когда я открываю WSL, щелкая по его значку, мне нужно, чтобы он открывался в определенном каталоге (конечно, более полезном, чем System32), поэтому я добавляю cd destination в свой .bashrc. Но затем опция «Открыть оболочку Linux здесь» (доступна, когда вы удерживаете клавишу Shift на клавиатуре и щелкаете правой кнопкой мыши любую папку, также перенаправляется в это место назначения, что нежелательно. Есть ли способ Я могу обнаружить этот случай в моем .bashrc сценарии и позволить ему вести себя как следует?

Короче говоря, мне нужно знать, когда оболочка была открыта с помощью параметра в Shift + Щелкните правой кнопкой мыши внутри папки, чтобы избежать смены рабочего каталога на другой.

Я использую WSL-Ubuntu 18.04 LTS и GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu).

5
задан 1 August 2019 в 20:24

2 ответа

Я изменился бы ~/.bashrc улучшение к чему-то вроде этого:

CurrDir="$(pwd)"
if [[ "$CurrDir" == "$SystemDir" ]]
then
    cd /path/to/sensible-dir-name
Fi

Где $SystemDir Ваш каталог System32. Всегда помните как \ и / отличайтесь между путями Windows и Linux:

Предлагает использовать:

sed -e 's#^J:##' -e 's#\\#/#g'

Это сказало в Вашем экземпляре, что Вы могли, вероятно, твердый код путь.

3
ответ дан 23 November 2019 в 10:25

Совместимость с VSCode и TMUX

Вы можете добавить следующий код в свой ~/.bashrc file:

alias current_dir="pwd | sed -e 's/ /\\ /'"
alias save='echo $(current_dir) > ~/.saved_dir && echo "saved current dir, use \"load\" to cd to it"'
alias load='builtin cd $(cat ~/.saved_dir 2>/dev/null)'

if [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] \
  && [[ ! "$TERM_PROGRAM" =~ vscode ]] \
  && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  # only load while in interactive console but not in vscode or not in tmux itself

  CURRENT_DIR=$(pwd)
  if [[ "${CURRENT_DIR,,}" == "/mnt/c/windows/system32" ]]; then
    # only load path if we start in default WSL system32 folder 
    # so "open in linux shell" still works
    load
  fi

  if command -v tmux &> /dev/null; then 
    # only run tmux if it is installed
    exec tmux
  fi
fi

Код проверяет, запущен ли терминал в интерактивном режиме, а не внутри сеанса VSCode или TMUX. В этом случае:

  • загружается сохраненный каталог (см. save/load) или ваш домашний каталог, если начальный путь равен windows/system32 (${CURRENT_DIR,,} преобразует строку в нижний регистр для лучшего соответствия)
  • автоматически запускает TMUX, если он установлен (просто удалите его, если вам не нравится TMUX)

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

Дополнительную информацию см. в моем репозитории dotfiles на GitHub.

1
ответ дан 18 January 2021 в 13:45

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

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