Разница между sh file.sh и file.sh

У меня есть два вопроса:

  1. В чем разница между выполнением sh filename.sh и filename.sh?
  2. Как я могу заставить их обоих давать мне один и тот же результат?

Я задаю этот вопрос, так как сейчас я столкнулся с проблемой. Я пытаюсь запустить приложение Java + SWT из терминала.

Когда я делаю filename.sh, это дает мне желаемый результат. Но когда я делаю sh filename.sh или bash filename.sh, я получаю сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: MainForm/java
Caused by: java.lang.ClassNotFoundException: MainForm.java
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: MainForm.java.  Program will exit.

Я знаю, что этот вопрос уже задавался здесь, но мне все еще неясно,

Я прошел по следующим ссылкам:

В чем разница между ./ и sh для запуска скрипта?

Могут ли скрипты работать даже когда они не установлены как исполняемые?

Может кто-нибудь помочь мне с этим?

1
задан 13 April 2017 в 15:23

2 ответа

Сценарий, вероятно, знает, в какой оболочке он должен работать. Первая строка может выглядеть примерно так:

#!/bin/bash

Если вы запустите его с sh, первая строка (a.k.a. shebang) игнорируется. Другая оболочка пытается запустить скрипт, но не понимает его - это все равно, что запускать Java-код в Pascal. Если вы запускаете его с правильной оболочкой, он должен вести себя одинаково:

/bin/bash script.sh
0
ответ дан 13 April 2017 в 15:23

Поместив bash или sh перед вашим файлом, вы заставляете использовать эту оболочку для запуска вашего файла. Поэтому лучше использовать первую строку файла:

#!/path/to/shell

Так что каждый раз, когда вы выполняете свой файл, он будет с одной и той же оболочкой.

И для вашего второго вопроса, нет, вам нужно сделать исполняемый скрипт для его запуска:

chmod +x file.sh
0
ответ дан 13 April 2017 в 15:23

Другие вопросы по тегам:

Похожие вопросы: