我检查了类似的问题并尝试了给出的答案,但没有成功。
我正在使用 WSL 并尝试做一些简单的事情。获取一个 Windows 路径并对其进行格式化,让我使用此脚本 cd 到该目录,我们将其称为 cdw。
剧本:
#!/bin/bash
input_path="$1"
# Replace backslashes with forward slashes
new_path="${input_path//\\//}"
# Replace drive letter with linux mount path
new_path="${new_path/Z:/\/mnt\/z}"
echo "$new_path"
cd "$new_path"
但是,尝试./cdw.sh 'Z:\test'
回显预期的 $new_path,但没有到达那里:
user1: /mnt/z $ ./cdw.sh 'Z:\test'
/mnt/z/test
user1: /mnt/z $
这里我是否遗漏了一些非常简单的东西?
答案1
脚本在子 shell 中运行。在子 shell 中更改目录不会传播到父 shell。
要么获取脚本
. csw.sh 'X:\test'
或者使用函数而不是脚本(.bashrc
如果希望它每次都存在,请在文件中声明它):
csw() {
... # The code goes here
}
答案2
如果你改变当前目录在脚本中,当前目录剧本之外不会改变,因为该脚本是由 shell 的单独实例运行的。
而不是简单地跑步你的脚本,尝试来源它;那么它将在 shell 的当前实例中执行,而不会产生新的实例。
类型:
. ./cdw.sh 'Z:\test'
(是的,在行.
首是一个命令)它应该可以工作。
答案3
只需从 WSL 使用wslpath
,则无需转换路径。
Usage:
-a force result to absolute path format
-u translate from a Windows path to a WSL path (default)
-w translate from a WSL path to a Windows path
-m translate from a WSL path to a Windows path, with '/' instead of '\'
EX: wslpath 'c:\users'
例子:
cd $(/usr/bin/wslpath 'Z:\test')