0 votos

Me gustaría anticipar un comando en mi mac (específicamente, Keytool)

Necesito, al generar almacenes de claves de Java (lo cual hago con frecuencia), generarlos bajo la versión Java 8 de Keytool. Si uso el keytool en la versión Java por defecto, son incompatibles con el Java en los sistemas de destino que administramos.

He descubierto una forma de hacer esto, con un script de shell envolvente (actualmente llamado "keytool8"). Y ese script de shell emite un mensaje indicando que está usando el keytool de Java 8, antes de pasar a ese keytool.

Y tengo el script de shell en un directorio que está en mi ruta.

Pero si lo renombro a "keytool" y escribo "keytool" desde una línea de comandos, todavía obtengo el keytool por defecto.

¿Hay alguna forma para que mi script de shell sustituya al keytool por defecto?

MÁS INFORMACIÓN, 9/11/2023

Agregué "/Users/jameslampert/Applications" (el directorio donde puse mi script) a mi /etc/paths, así que ahora se ve así:

/Users/jameslampert/Applications
/usr/local/bin
/System/Cryptexes/App/usr/bin
/usr/bin
/bin
/usr/sbin
/sbin

y ahora "echo $PATH" produce

/opt/homebrew/bin:/opt/homebrew/sbin:/Users/jameslampert/.nvm/versions/node/v16.0.0/bin:/Users/jameslampert/Applications:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

Si hago "which keytool," obtengo:

/usr/bin/keytool

De alguna manera, el keytool por defecto me está sustituyendo, incluso aunque /usr/bin teóricamente esté después de /Users/jameslampert/Applications en la ruta.

3voto

Marc Wilson Puntos 146

Cierto.

Coloca el script de shell en un directorio que aparezca en tu ruta antes del binario keytool que estás intentando prevenir.

-1voto

hbquikcomjamesl Puntos 51

Gracias, Sr. Wilson. No estaba previendo ayer, pero lo estoy haciendo hoy (pero tan agresivamente que estaba entrando en un bucle recursivo). Una vez que arreglé eso, parece estar funcionando bastante bien (toco madera).

Así es como terminó viendo mi script:

#!/bin/bash
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home'
echo -e "\033[0;31m*** USANDO JAVA 8 KEYTOOL ***\033[0m"
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/keytool $@

Línea por línea:

  1. Hace unos meses, aprendí de la peor manera lo que puede suceder con un "shebang" genérico, así que he estado usando explícitamente uno desde entonces.
  2. Cambia temporalmente el JAVA_HOME durante la duración del script.
  3. Muestra un mensaje, en rojo, para indicar que se está usando el keytool de Java 8
  4. Invoca explícitamente el keytool de Java 8, usando la ruta completa para evitar el bucle recursivo.

Y por si alguna vez realmente necesito una forma fácil de usar el keytool por defecto, he añadido un envoltorio complementario, "keytool-default":

#!/bin/bash
echo -e "\033[0;31m*** USANDO EL KEYTOOL POR DEFECTO ***\033[0m"
/usr/bin/keytool $@

Le estoy dando a Sr. Wilson la marca de verificación "Aceptada", porque me señaló en la dirección correcta, y me llevó a cuestionar los hallazgos de ayer (que estaban en una ventana de terminal nueva, pero no en un reinicio).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X