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).

Sobre a versão do Java, acredito que seja superior a 11 mesmo. Interessante demais isso que voce falou, cara. Não sabia dessa funcionalidade para um único arquivo do Java. Logo mais, estarei reajustando o código como você indicou para evitar esses passos desnecessário.

Obrigado pelo comentário, kht! Com certeza agregou muito com sua resposta.