我有一个通常在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)
答案 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转换可靠地运行,请尽量避免使用这些名称。