Когда я открываю WSL, щелкая по его значку, мне нужно, чтобы он открывался в определенном каталоге (конечно, более полезном, чем System32
), поэтому я добавляю cd destination
в свой .bashrc
. Но затем опция «Открыть оболочку Linux здесь» (доступна, когда вы удерживаете клавишу Shift kbd> на клавиатуре и щелкаете правой кнопкой мыши любую папку, также перенаправляется в это место назначения, что нежелательно. Есть ли способ Я могу обнаружить этот случай в моем .bashrc
сценарии и позволить ему вести себя как следует?
Короче говоря, мне нужно знать, когда оболочка была открыта с помощью параметра в Shift kbd> + Щелкните правой кнопкой мыши внутри папки, чтобы избежать смены рабочего каталога на другой.
Я использую WSL-Ubuntu 18.04 LTS
и GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
.
Я изменился бы ~/.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'
Это сказало в Вашем экземпляре, что Вы могли, вероятно, твердый код путь.
Вы можете добавить следующий код в свой ~/.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,,}
преобразует строку в нижний регистр для лучшего соответствия)Если затем вы хотите изменить свой начальный каталог, просто перейдите в каталог, который вы хотите использовать в качестве начального каталога, и введите save
. В следующий раз, когда вы запустите свой терминал, этот каталог будет загружен автоматически.
Дополнительную информацию см. в моем репозитории dotfiles на GitHub.