¿Por qué estos archivos no forman parte de / etc / profile si también son críticos para el inicio de Bash?
Si quiere decir, "¿Por qué no se combinan en un guión gigante?", La respuesta es:
- Porque eso sería una pesadilla de mantenimiento para las personas responsables de los guiones.
- Debido a que tener los scripts cargados como módulos independientes hace que todo el sistema sea más dinámicamente ajustable: los scripts individuales se pueden agregar y eliminar sin afectar a los demás. Etc.
- Debido a que se cargan a través de / etc / profile lo que los hace parte del bash "profile" de la misma manera de todos modos.
Si estos archivos son archivos de inicio específicos de la aplicación que no son críticos para el inicio de Bash, ¿por qué forman parte del proceso de inicio? ¿Por qué no se ejecutan solo cuando se ejecutan las aplicaciones específicas, para las cuales contienen configuraciones?
Eso me parece una pregunta de filosofía de diseño más amplia que dividiré en dos. La primera pregunta es sobre el valor y la idoneidad del uso del entorno de shell. ¿Tiene valor positivo? Si, es útil. ¿Es la mejor solución para todos los problemas de configuración? No, pero es muy eficiente para administrar parámetros simples y también ampliamente reconocido y entendido. Compare eso con decir, decidiendo configurar tales cosas de manera heterogénea, tal vez $ PATH podría ser administrado por una herramienta independiente separada, las herramientas preferidas como $ EDITOR podrían estar en un archivo sqlite en algún lugar, $ LC lang podría estar en un archivo de texto con un formato personalizado en otro lugar, etc., no solo usa variables env y/etc/profile.d
de repente parece más simple? Probablemente ya sepa qué es una variable env, cómo funcionan y cómo usarla, frente a aprender 5 mecanismos completamente diferentes para 5 aspectos ubicuos diferentes de lo que se denomina apropiadamente "el entorno".
La segunda pregunta es: "¿Es el inicio el momento adecuado para esto?", Lo que plantea la objeción de que no es muy eficiente (todos esos datos que pueden o no ser utilizados, etc.). Pero:
- Siendo realistas, no se trata de tantos datos, en parte porque nadie en su sano juicio lo usaría para más que unos pocos parámetros simples (ya que hay otros medios para configurar una aplicación).
- Si se usa sabiamente, con respecto a las cosas que se invocan comúnmente, entonces establecer, por ejemplo, $ CFLAGS predeterminado desde un archivo en algún lugar cada vez que invoque
gcc
sería menos eficiente. Tenga en cuenta que la cantidad de memoria involucrada es, nuevamente, infinitesimal.
- Puede involucrar cosas sistémicas en las que puede estar involucrada más de una aplicación, y el shell es un terreno común .
Se podría agregar más a esa lista, pero es de esperar que esto le dé alguna idea sobre los pros y los contras del problema: el principal 'pro' y el mayor 'con' es que es un espacio de nombres global.
Does it have positive ... and understood.
Qué estás tratando de decir aquí ? Entendí todo lo que no sea ese párrafo.profile.d
directorio solo funciona porque su contenido proviene de/etc/profile
, que se especifica mediante shells como bash como un archivo de inicio (consulte INVOCACIÓN enman bash
); si edita/etc/profile
, puede deshabilitarlo/etc/profile.d
./etc/profile.local
parece ser un invento de SUSE, presumiblemente procedente de algún lugar como/etc/profile
para que pueda poner sus propias cosas allí. Sin embargo, si lo mueve a un sistema que no sea SUSE y no realiza ningún otro ajuste, nada lo utilizará.Esos archivos son específicos de una aplicación, pero se obtienen al iniciar el shell, no cuando se inicia la aplicación. Aquí se usa un directorio de configuración por la misma razón que se encuentra en muchos otros lugares. Esto permite que una aplicación o paquete de software modifique las configuraciones. Esto no sería posible sin una configuración dividida, ya que varios paquetes que intentan administrar / actualizar un solo archivo de configuración que también puede ser modificado por el usuario serían defectuosos y desordenados.
También una nota al margen,
/etc/profile
se obtiene de todos los shells, no solo bash. El archivo de configuración específico de bash es bashrc y solo se obtiene para shells interactivos.fuente
La respuesta de jordanm es incorrecta.
/etc/profile
No se obtiene de todos los depósitos. Como usted señala, no se obtiene mediantecsh
,tcsh
- No estoy seguro acerca dezsh
. Se obtiene de lossh
derivados de Bourne shell ( ), como Korn Shell (ksh
) y BASH (bash
).csh
usos/etc/login
. Las personas que tienden a usar exclusivamente derivados de Shell Borne tienden a olvidar que existen otros shells. Añaden algo a/etc/profile
esperar que se aplique a "todos los usuarios" y luego se sorprenden cuando el usuario extraño de C Shell (y somos un lote extraño) no tiene las cosas en las que se configuró/etc/profile
.Aun así, las personas tienden a olvidarse de que existen otros shells derivados de Borne Shell. Si usan
bash
oksh
, se sienten libres de agregar una sintaxis/etc/profile
que no es válida en Bourne Shell, como por ejemplo definir una variable y exportarla en la misma línea. Luego obtienes un script que lo hace#!/bin/sh
y se ahoga en la sintaxis./etc/profile
debería ajustarse a la sintaxis compatible con Bourne Shell.Del mismo modo, debe cumplirlo por su cuenta
.profile
(use.bash_profile
si desea una sintaxis bash): puede ser un poco más de mecanografía, pero es una mecanografía adicional que hace todo una vez. Referencia${HOME}
y no~
, etc. Algunos tipos de Unix, trabajos cron se ejecutansh
, cada línea suyaMakefile
es procesadash
, por lo que si está trabajando en varios tipos de UNIX, realmente vale la pena mantener su.profile
shell Bourne compatible. Como SysAdmin, no puedo decirte cuántas veces he ayudado a alguien arreglando su.profile
compatibilidad con Bourne Shell.En Linux,
/bin/sh
es un enlace/bin/bash
y, cuando lo ejecuta, se ve la ruta que se utilizó para ejecutarlo y (en teoría) se limita solo a las cosas que admite Bourne Shell. Del mismo modo,vi
en Linux realmente sevim
limita de nuevo. De vez en cuando ves características "desangrarse". De vez en cuandovim
finge servi
va a hacer algo quevim
admite quevi
no porque los autores devim
olvidó de desactivar esta en modo "compatibilidad hacia atrás vi". No me sorprendería sibash
pretender sersh
tiene algunas características similares de "desangrado". No se sorprendería si alguna característica "funciona en Borne Shell en Linux", pero no en un sistema V o UNIX basado en BSD (AIX, OpenBSD, etc.).fuente
/bin/sh
hay un enlace a/bin/bash
"? Esa es una buena declaración.