0 votes

Je voudrais anticiper une commande sur mon mac (plus précisément, Keytool)

Je dois, lors de la génération de keystores Java (que je fais fréquemment), les générer sous la version Java 8 de Keytool. Si j'utilise le keytool dans la version Java par défaut, ils sont incompatibles avec le Java sur les systèmes cibles que nous gérons.

J'ai trouvé un moyen de le faire, avec un script shell wrapper (actuellement appelé "keytool8"). Ce script shell affiche un message indiquant qu'il utilise le keytool Java 8, avant de passer à ce keytool.

Et j'ai le script shell dans un répertoire qui est dans mon chemin.

Mais si je le renomme en "keytool" et que je saisis "keytool" à partir d'une ligne de commande, j'obtiens toujours le keytool par défaut.

Y a-t-il un moyen pour mon script shell de préempter le keytool par défaut?

PLUS D'INFORMATIONS, 11/09/2023

J'ai ajouté "/Users/jameslampert/Applications" (le répertoire où j'ai mis mon script) à mon /etc/paths, de sorte qu'il ressemble maintenant à:

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

et maintenant "echo $PATH" produit

/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 je fais "which keytool," j'obtiens:

/usr/bin/keytool

De quelque manière, le keytool par défaut me préempte, même si /usr/bin est théoriquement après /Users/jameslampert/Applications dans le chemin.

3voto

Marc Wilson Points 3640

Certainement.

Placez le script shell dans un répertoire qui apparaît dans votre chemin d'accès avant le binaire keytool que vous essayez de préempter.

-1voto

hbquikcomjamesl Points 891

Merci, M. Wilson. Ce n'était pas une anticipation hier, mais c'est le cas aujourd'hui (mais de manière si agressive qu'il entrait dans une boucle récursive infinie). Une fois que j'ai corrigé cela, tout semble fonctionner assez bien (touchons du bois).

Voici à quoi ressemble mon script final :

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

Ligne par ligne :

  1. Il y a quelques mois, j'ai appris à la dure ce qui peut arriver avec un "shebang générique", donc j'ai pris l'habitude d'en utiliser un explicite depuis.
  2. Changer temporairement le JAVA_HOME pour la durée du script.
  3. Afficher un message, en rouge, pour indiquer que le keytool Java 8 est utilisé.
  4. Appeler explicitement le keytool Java 8, en utilisant le chemin d'accès complet pour éviter la boucle récursive infinie.

Et au cas où j'aurais réellement besoin d'un moyen facile d'utiliser le keytool par défaut, j'ai ajouté une enveloppe complémentaire, "keytool-default" :

#!/bin/bash
echo -e "\033[0;31m*** UTILISATION DU KEYTOOL PAR DÉFAUT ***\033[0m"
/usr/bin/keytool $@

Je donne à M. Wilson le checkmark "Accepté", car il m'a mis sur la bonne voie et m'a poussé à remettre en question les conclusions d'hier (qui étaient dans une nouvelle fenêtre de terminal, mais sans redémarrage).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X