3 votes

Ligne de commande MacOS - est-il possible d'écrire des scripts portables entre MacOS et Linux ?

J'ai été plutôt satisfait de MacOS en tant que plateforme de développement, et il est quelque peu similaire à une ligne de commande linux, mais il y a un certain nombre d'exceptions notables :

  • toutes les commandes : le comportement de l'analyse des arguments diffère. Linux accepte les drapeaux dans n'importe quel ordre, y compris les drapeaux qui suivent les fichiers. Sous MacOS, les drapeaux qui suivent les fichiers sont ignorés ; les drapeaux doivent être présentés avant tout nom de fichier.

  • base64 : n'est pas installé par défaut. une fois installé, il n'accepte PAS l'option '-i' qui est nécessaire sous Linux pour ignorer les espaces dans le texte encodé en base64.

  • sed : MacOS traite le drapeau "-i" TRÈS différemment de Linux (nécessite une extension qui casse les scripts sous Linux). la regex étendue est "-E" sous MacOS et "-e" sous Linux.

(plus une série d'autres questions...)

Dans presque tous les cas, j'ai trouvé la variante comportementale de Linux plus facile à utiliser / plus puissante. Existe-t-il un moyen d'améliorer les utilitaires de ligne de commande de MacOS pour les rendre plus semblables à ceux de Linux ? Ou est-ce que je me trompe et que je devrais boire un peu de kool-aide ? C'est mineur, mais ces pépins m'arrachent les cheveux lorsque j'essaie de passer d'une boîte de développement Linux à une boîte de développement MacOS.

2voto

Les différents outils GNU sont disponibles dans Fink, DarwinPorts ou autres.

2voto

iconoclast Points 3099

Darwin, la base Unix de Mac OS X, est essentiellement une variante de BSD, ce qui explique certaines des différences que vous constatez. L'absence de certains outils qui pourraient être standard sur la plupart ou la totalité des distros Linux peut être résolue par

  • à l'aide d'un gestionnaire de paquets, tel que
    • MacPorts, ou
    • Fink ; ou par
  • l'installation de la source.

Parfois, les paquets accusent un retard inacceptable. Par exemple, j'ai trouvé un bogue dans tmux 1.4 qui le rend inutilisable pour moi, mais macports n'a pas encore la version 1.5. L'installation à partir des sources peut donc être préférable dans de nombreux cas.

0voto

Karmen Points 1

Il y a un tas de "mêmes" programmes qui n'interprètent pas les options d'un *nix de la même manière qu'ils interprètent les mêmes options dans l'autre *nix OS, y compris linux. Il n'y a rien que l'on puisse faire à ce sujet.

Et si les commandes intégrées de Shell vous dérangent, tapez un Shell ps -p $$. Voyez le nom de la sortie de Shell sous CMD. Si les shells sont différents, il suffit d'installer sur OSX le même type de Shell que celui trouvé sous linux. Il peut s'agir de tcsh et de zsh.

0voto

Dave Dopson Points 1225
  1. Installer Homebrew

  2. "brew install coreutils gnu-sed gnu-tar gnu-getopt gnu-time gnu-which"

Ensuite, toutes les fonctions standard de Linux sont disponibles avec un préfixe "g" -- donc "gtar" au lieu de "tar".

Avec un peu d'astuce, il est possible de passer des programmes BSD originaux aux versions GNU/Linux. Par exemple, créer un /usr/local/gnubin avec des liens symboliques comme tar --> /usr/local/bin/gtar. Placez ensuite ce répertoire en premier dans la variable PATH. Il y a aussi l'utilisation d'alias, mais je ne suis pas un grand fan des alias qui sont les mêmes qu'un vrai programme (je trouve cela fragile et source d'erreurs).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X