我编写了以下名为wslLauncher.sh
的bash脚本,其中包含:
#!/bin/bash
wsl java -jar "/mnt/e/someProjectFolder/JavaServerSort.jar"
当我从例如cmd运行此确切命令时,它将执行.jar
文件。如果我在wsl ubuntu 16.04中运行没有前面的wsl
的命令,它也会执行.jar
文件。但是,当我从例如命令执行wslLauncher.sh
脚本时,通过键入位置E:/
:wslLauncher.sh
,bash返回:
错误:无法访问jarfile C:/ Program 文件/Git/mnt/e/someProjectFolder/JavaServerSort.jar
为什么wslLauncher.sh
在C:/Program Files/Git/
命令中指定的JavaServerSort.jar
之前指向wslLauncher.sh
文件的路径?
我的第一个猜测是程序bash
的工作目录当时是C:/Program Files/Git/
,而java -jar
表示下一个参数包含路径,并且bash总是自动假定该路径相对于工作目录,因此在C:/Program Files/Git/mnt/e/..
中而不是在/mnt/e/...
中查找文件。
要检验我的假设,我修改了wslLauncher.sh
以打印“ https://www.cyberciti.biz/faq/pwd-linux-unix-command-examples/,在此显示工作目录”,产生:
#!/bin/bash
echo $PWD
wsl java -jar "/mnt/e/someProjectFolder/JavaServerSort.jar"
但是,它返回wslLauncher.sh
所在的路径(Linux风格,没有/mnt/
:
/ e /
因此,该假设被拒绝; bash不会将其工作目录放在命令中指定的路径之前。
该命令可能在环境路径之前。为了检查是否可能是这种情况,我将wslLauncher.sh
文件修改为:
#!/bin/bash
printenv
wsl java -jar "/mnt/e/someProjectFolder/JavaServerSort.jar"
返回了很多路径列表,但是没有包括git..
路径,因此第二个假设被拒绝; bash没有添加环境。
也许命令提示符将其工作目录传递到wslLauncher.sh
。工作目录不是C:/Program Files/Git/
,因此该假设被拒绝。