Is there a smart/secure/easy way to make these changes temporary for specific process?
Variáveis de ambiente como $JAVA_HOME são herdadas, não globais para o sistema. Portanto, se você definir uma maneira específica, ela se aplicará apenas a esse processo e, se exportada, qualquer processo gerado.
O processo aqui seria uma instância de shell; você pode fazer isso na linha de comando ou criar algo assim:
#!/bin/sh
PATH=/opt/oracle/java/bin:$PATH
export $PATH
exec whatever.jar
Caso você não esteja familiarizado com a forma como $PATH funciona, os diretórios são verificados em ordem, portanto, neste caso, /opt/oracle/java/bin será pesquisado antes de mais nada, e quando java for necessário, aquele será usado .
Você pode elaborar isso para usar argumentos quando invocá-lo para especificar qual arquivo .jar ou .class a ser executado, e algum argumento abreviado para o qual a instalação java deve ser usada, por exemplo, if [[ $1 == 2 ]]; then PATH=/opt/oracle2/java/bin... .
Esse $PATH (e $JAVA_HOME , se você fizer isso também) só será aplicado ao script e a qualquer coisa que ele começar.
Se você está trabalhando em algo, você pode export as variáveis em um terminal e ele continuará a se aplicar lá e somente lá. Se você tiver o JDK instalado, o mesmo diretório bin contém javac , etc.