为什么bash文件在命令中将路径添加到文件路径之前?

时间:2019-06-04 15:44:29

标签: java bash shell path

场景

我编写了以下名为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.shC:/Program Files/Git/命令中指定的JavaServerSort.jar之前指向wslLauncher.sh文件的路径?

尝试0

我的第一个猜测是程序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不会将其工作目录放在命令中指定的路径之前。

尝试1

该命令可能在环境路径之前。为了检查是否可能是这种情况,我将wslLauncher.sh文件修改为:

#!/bin/bash
printenv
wsl java -jar "/mnt/e/someProjectFolder/JavaServerSort.jar"

返回了很多路径列表,但是没有包括git..路径,因此第二个假设被拒绝; bash没有添加环境。

尝试2

也许命令提示符将其工作目录传递到wslLauncher.sh。工作目录不是C:/Program Files/Git/,因此该假设被拒绝。

0 个答案:

没有答案