3 votes

Comment mettre à jour les programmes shell

Comment mettre à jour des programmes shell comme crontab par exemple ? Sur mon Mac, j'ai une version datant du 29 décembre 1993, mais sur un serveur linux que j'utilise, la version de crontab est bien meilleure en termes de convivialité puisqu'elle date du 19 avril 2010.

Je suis sous MacOS Mojave et ma version de bash est : GNU bash, version 5.0.2(1)-release (x86_64-apple-darwin18.2.0)

crontab sur mon Mac : Mac crontab sur mon Linux : Linux

0 votes

Comment avez-vous mis à jour votre bash ?

0 votes

Avec homebrew ( brew.sh ). Une fois que vous l'avez installé, exécutez brew install bash . Et une fois que c'est fait, vous devez ajouter le répertoire de votre shell actuel (vérifiez le répertoire de celui-ci en exécutant which bash ) à /etc/shells . Et enfin, changez votre shell en exécutant la commande change shell : chsh -s "shell's directory you've added to /etc/shells"

0 votes

C'était une question un peu rhétorique :-)

3voto

nohillside Points 82672

Le contenu de /usr/bin et ses amis est mis à jour avec chaque version de MacOS, mais généralement les versions fournies par Apple sont nettement plus anciennes que celles disponibles sous Linux. Il y a plusieurs raisons à cela, dans beaucoup de cas c'est lié à des changements dans la GPL. Dans le cas de crontab il peut également jouer un rôle dans le fait que l'utilisation de cron est déprécié, launchd doit être utilisé à la place.

Si vous voulez mettre à jour vous-même les binaires Unix

  • Utilisez Homebrew ( https://brew.sh )
  • Compilez vous-même à partir des sources et installez dans /usr/local/bin

0 votes

Quand j'ai essayé brew install cron y brew install crontab il a seulement dit qu'il n'y avait pas de formules disponibles avec ces noms.

0 votes

Mais comme vous l'avez dit, je pense que je vais commencer à utiliser launchd à la place, merci !

0 votes

@Victor Ouais, on dirait qu'il n'y a pas de formule pour cron . Vous pouvez toujours compiler vous-même, mais je ne suis pas sûr que cela en vaille la peine.

1voto

Christopher Points 965

Où se trouve l'exécutable ?

command -v cron

Le résultat montre /usr/sbin/cron . Protection de l'intégrité du système (SIP) protège le contenu de /usr ; nous ne pouvons donc pas effectuer de changement de toute façon tant que le SIP est activé. Vous avez installé BASH via Homebrew, je suppose. Une recherche dans Homebrew pour des formules ou des fûts liés à cron ne révèle aucun candidat ( brew search cron ), peut-être pour les raisons évoquées par @nohillside. Peut-être cron était un mauvais exemple et un meilleur exemple pourrait être vim . Comme vous l'avez découvert, on peut utiliser un gestionnaire de paquets comme Homebrew ou Macports pour installer des logiciels plus récents. Pour chaque paquet installé, Homebrew, au moins, installe un lien symbolique vers l'endroit où l'exécutable a été installé ( /usr/local/Cellar/[...] ) ; ainsi, nous pourrions utiliser un alias shell ou modifier le fichier PATH pour utiliser de meilleures versions des logiciels courants. J'utilise l'approche des alias du shell.

Par exemple, mon shell est zsh et j'ai installé MacVim. Si le lien symbolique pour la version de MacVim de vim existe ( -h ), puis définir un nouvel alias. Maintenant, chaque fois que j'exécute vim je n'exécute pas le vim situé à /usr/bin ; plutôt, j'exécute le vim situé à /usr/local/bin . Le test et la définition ci-dessous fonctionnent de la même manière pour bash.

[ -h '/usr/local/bin/vim'  ] && alias vim='/usr/local/bin/vim'
[ -h '/usr/local/bin/view' ] && alias view='/usr/local/bin/view'

Puis utilisez le gestionnaire de paquets pour mettre à jour le logiciel périodiquement.

if brew update 2>/dev/null; then
    brew upgrade
    brew cleanup
    rm -rf "$(brew --cache)"
fi

0 votes

Il serait peut-être plus facile de mettre /usr/local/bin devant /usr/bin dans votre PATH (et dans /etc/paths ), sinon vous devez définir des alias pour chaque commande que vous installez. De plus, les alias ne fonctionnent pas dans scripts (enfin, au moins pas dans bash, je ne sais pas pour zsh).

0 votes

Bonjour, et merci pour la note @nohillside. Oui, j'ai fait allusion à la PATH approche. Moi-même, je n'utilise pas les alias dans les scripts - seulement le shell interactif.

0 votes

@nohillside Oh ! Et nous n'avons besoin d'un alias que si la même commande existe déjà dans le fichier PATH avant /usr/local .

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