Debido al trabajo, recientemente comencé a usar OS X y lo configuré usando homebrew para obtener una experiencia similar a la de Linux.
Sin embargo, hay bastantes diferencias en su configuración. Algunos solo necesitan estar en su lugar en un sistema. Como mis dotfiles viven en un repositorio git, me preguntaba qué tipo de conmutador podría establecer, de modo que algunas configuraciones solo se leen para el sistema Linux y otras para OS X.
En cuanto a los archivos de puntos, me refiero, entre otros, a .bash_profiles
o .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
, traducido al archivo rc apropiado. El archivo rc principal que trato de mantener independiente del sistema, mientras que la.local
versión tiene configuraciones específicas del sistema. Si lo quiere todo en un único repositorio, puede tener directorios del sistema y vincular el rcfile.local con el del directorio correcto.Respuestas:
Mantenga los archivos de puntos lo más portátiles posible y evite configuraciones o conmutadores dependientes del sistema operativo que requieran una versión particular de una herramienta, por ejemplo, evite la sintaxis de GNU si no utiliza el software GNU en todos los sistemas.
Probablemente se encontrará con situaciones en las que es conveniente utilizar configuraciones específicas del sistema. En ese caso, utilice una instrucción de cambio con la configuración individual:
En caso de que los archivos de configuración de aplicaciones arbitrarias requieran diferentes opciones, puede verificar si la aplicación proporciona conmutadores de compatibilidad u otros mecanismos. Por
vim
ejemplo, puede verificar la versión y el nivel de parche para admitir características que las versiones anteriores o versiones compiladas con un conjunto de características diferente no tienen. Fragmento de ejemplo de.vimrc
:fuente
uname -s
es comouname
. uname significa nombre Unix.-s
?uname
solo ha sido la forma canónica de hacerlo durante décadas y POSIX lo especifica. El originaluname
(en PWB Unix) no tomó ninguna opción.-s
de esta respuesta y lo tendré en cuenta para mis futuros scripts.set
supone que esas citas en el vimrc son U + 201C y U + 201D en lugar de U + 0022?Si solo le preocupan los archivos que realmente se ejecutan, como .bash_profiles y amigos, puede salirse con la suya, por ejemplo,
uname
para diferenciar según el sistema en el que se ejecuta el código.Por ejemplo , completamente no probado y con la advertencia de que no tengo un OS X para probar cosas, si actualmente tienes en Linux:
y en Mac OS X:
(donde
-x
hace que OS Xls
haga algo que GNU ls hace por defecto), entonces se pueden combinar en algo como esto:El único requisito es que
uname -s
funcione de la misma manera (debería hacerlo, ya que ambos sistemas son razonablemente POSIX-yy uname -s es requerido por POSIX (gracias Marco por señalar esto )), y que la sintaxis para la ramificación del script de shell basado en una comparación de cadenas es lo mismo. Probablemente también pueda realizar pruebas según otros criterios; por ejemplo, puede buscar / etc / lsb_release, verificar si / proc / sys / kernel / ostype contiene "Linux", o cualquier otra prueba que se le ocurra.fuente
Darwin
, acabo de comprobar.-o
conmutador uname no es POSIX y falla en muchos sistemas, por ejemplo, Solaris.-s
es obligatorio en POSIX y la forma más compatible. IEEE Std 1003.1OSTYPE
no está disponible en un shell POSIX. Fallará, por ejemplo, en una instalación predeterminada de FreeBSD y solo se puede usar en.bashrc
o.zshrc
. No funciona de forma fiable en.profile
,.alias
, etc. Ya que estamos hablando de compatibiliy aquí, me gustaría asesoramiento a ir por el camino seguro, en lugar de confiar en las características particulares de la cáscara, que no están garantizados para estar disponible en todos los sistemas.