无法在简单的 bash 脚本中 cd 到路径变量

无法在简单的 bash 脚本中 cd 到路径变量

我检查了类似的问题并尝试了给出的答案,但没有成功。

我正在使用 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')

相关内容