当我通过单击其图标打开 WSL 时,我需要在某个目录(当然比 更有用的目录System32
)中打开它,因此我cd destination
在 中添加了一个.bashrc
。但是,“在此处打开 Linux Shell”选项(当您按住Shift键盘上的键并右键单击任何文件夹时可用)也被重定向到该目的地,这是不可取的。有没有办法在我的.bashrc
脚本中检测到这种情况并让它正常运行?
简而言之,我需要通过Shift+中的选项知道何时打开了 shell右键点击文件夹内,这样我就可以避免将工作目录更改为另一个目录。
我正在使用WSL-Ubuntu 18.04 LTS
和GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
。
答案1
我会将~/.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'
也就是说,在您的例子中,您可能可以对路径进行硬编码。
答案2
VSCode 和 TMUX 兼容
您可以将以下代码添加到您的~/.bashrc
文件中:
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了解更多信息。