Qual versão do Java vc está usando?
Pois a partir do Java 11, para um único arquivo, é possível rodar direto, sem fazer o passo de compilação à parte. Ou seja, dá pra chamar assim:
java Beginner/1000/Main.java
Desta forma, ele já compila e roda, tudo de uma vez. Com o detalhe que o arquivo .class
nem sequer é gerado, ou seja, vc não precisa se preocupar em apagá-lo depois.
Esta funcionalidade está definida na JEP 330 (Launch Single-File Source-Code Programs), e como o próprio nome diz, serve para "programas de um arquivo só" (que parece ser justamente o seu caso).
Sendo assim, daria para mudar o run.sh
para:
#!/bin/bash
# Verifica se o argumento foi passado
if [ -z "$1" ]; then
echo "Uso: bash run.sh <diretório ou caminho para Main.java>"
exit 1
fi
# Verifica se é um diretório ou um arquivo
if [ -d "$1" ]; then
FILE="$1/Main.java"
elif [ -f "$1" ]; then
FILE=$1
else
echo "Erro: Argumento inválido. Passe um diretório ou o caminho para Main.java."
exit 1
fi
# Compila e executa o arquivo (ou mostra mensagem, caso ocorra algum erro)
java "$FILE" || echo "Erro na compilação/execução do arquivo."
E em vez de bash run.sh
, uma sugestão é adicionar a permissão de execução ao arquivo:
chmod u+x run.sh
Desta forma, o usuário terá permissão de execução, aí basta rodá-lo como ./run.sh [argumentos]
.
Claro que vc pode dar permissões para todos com
a+x
, entre outras variações. Mas somente para o usuário rodar,u+x
é o suficiente.
PS: para projetos com mais arquivos, dependências, etc, aí não recomendo fazer tudo na mão. Neste caso, ferramentas como o Maven ou Gradle são mais adequadas (mais aí acho que já estou desviando demais do assunto).