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.