Diferença entre sh file.sh e file.sh

1

Eu tenho duas perguntas:

  1. Qual é a diferença entre executar sh filename.sh e filename.sh ?
  2. Como posso fazer com que os dois me dêem a mesma saída?

Estou fazendo esta pergunta agora que estou enfrentando um problema. Estou tentando executar um aplicativo Java + SWT do terminal.

Quando eu faço filename.sh , isso me dá a saída desejada. Mas quando eu faço sh filename.sh ou bash filename.sh , isso me gera um erro:

Exception in thread "main" java.lang.NoClassDefFoundError: MainForm/java
Caused by: java.lang.ClassNotFoundException: MainForm.java
    at java.net.URLClassLoader.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.

Eu sei que essa pergunta já foi feita aqui, mas ainda não estou claro.

Eu passei pelos seguintes links:

Qual é a diferença entre ./ e sh para executar um script?

Os scripts podem ser executados mesmo quando estão não está definido como executável?

Alguém pode me ajudar com isso?

    
por RAS 16.10.2012 / 12:23

2 respostas

1

O script provavelmente sabe em qual shell ele deve estar sendo executado. A primeira linha pode ser algo como

#!/bin/bash

Se você executar com sh , a primeira linha (a.k.a. shebang) será ignorada. Um shell diferente tenta executar o script, mas não o entende - é como executar o código Java em Pascal. Se você executá-lo com o shell correto, ele deve se comportar de maneira idêntica:

/bin/bash script.sh
    
por choroba 16.10.2012 / 12:32
0

Colocando bash ou sh antes de seu arquivo, você força a usar este shell para executar seu arquivo. Por isso, é melhor usar a primeira linha do arquivo:

#!/path/to/shell

Assim, toda vez que você executar o seu arquivo, ele estará com o mesmo shell.

E para sua segunda pergunta, não, você precisa criar um script executável para executá-lo:

chmod +x file.sh
    
por NorTicUs 16.10.2012 / 13:24