获取bash脚本中的文件夹路径以在Windows上工作

时间:2016-08-21 08:05:08

标签: linux windows bash shell path

我有一个通常在linux中运行的脚本,但我也试图让它在Windows上运行。

该脚本基本上调用其他一些程序,然后移动大量文件。

问题是所有路径都是使用普通斜杠(/)完成的,但当我尝试使用cmder运行脚本时,如sh path/to/script/script.sh param它失败了找东西,因为它最终混合斜杠:Unable to access jarfile C:\full\path\to\file/here/are/normal/slashes/javafile.jar等等。

说,当我编辑java文件以使用两种操作系统路径时,我将斜杠的更改更改为使用java.nio.file.Paths.get来获取正确的路径。

有没有办法在bash上做类似的事情?

f.e。如果我有jarpath=../path/to/jar,请jarpath=correct_os_path(../path/to/jar)

1 个答案:

答案 0 :(得分:1)

要将斜杠更改为正确的操作系统类型,请尝试:

fixpath() {
    case "$OSTYPE" in
        *(linux|darwin|bsd)*) echo "${1//\\/\/}" ;;
        *win*) echo "${1//\//\\}" ;;
    esac
}

以上是一个名为fixpath的bash函数。该函数使用bash的OSTYPE变量来确定操作系统,然后使用bash的模式替换将斜杠更改为反斜杠,反之亦然。

例如,在Linux上运行时:

$ fixpath '\a\b\c/d/e'
/a/b/c/d/e

在您的使用案例中:

jarpath="$(fixpath "../path/to/jar")"

限制

在Unix上,文件或目录名可能包含文字\。为了使Unix-Windows转换可靠地运行,请尽量避免使用这些名称。

相关问题