Сценарий
Я написал следующий сценарий bash с именем wslLauncher.sh
, который содержит:
#!/bin/bash
wsl java -jar "/mnt/e/someProjectFolder/JavaServerSort.jar"
Когда я запускаю эту точную команду, например, из cmd, она выполняет .jar
файл.Если я запускаю команду без wsl
перед ней, в wsl ubuntu 16.04 она также выполняет файл .jar
.Однако, когда я выполняю сценарий wslLauncher.sh
, например, из команды, набрав в расположении E:/
: wslLauncher.sh
, bash возвращает:
Ошибка: невозможно получить доступ к jarfile C: / Program Files/Git/mnt/e/someProjectFolder/JavaServerSort.jar
Вопрос
Почему wslLauncher.sh
предшествует C:/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/
, поэтому эта гипотеза отклонена.