He definido una bashfunción en mi ~/.bashrcarchivo. Esto me permite usarlo en terminales de shell. Sin embargo, no parece existir cuando lo llamo desde un script.
¿Cómo puedo definir una bashfunción para que la utilicen también los scripts?
bash
shell-script
function
Onturenio
fuente
fuente

/bin/shen la línea shebang?Respuestas:
~/.bash_profiley~/.bashrcno son leídos por scripts, y las funciones no se exportan por defecto. Para hacerlo, puede usarexport -fasí:export -f footambién podría llamarse~/.bash_profilepara que esta función esté disponible para los scripts después de iniciar sesión. Ten en cuenta queexport -fno es portátil.Una mejor solución sería obtener el archivo que contiene la función usando
. file. Esto es mucho más portátil y no depende de que su entorno esté configurado de una manera particular.fuente
function myFunction { ... }en~/.bash_profiley estás listo?exportsolución parece funcionar correctamente. Gracias.foofunción de algunosfile2) Puede controlar mejor el contenido de esofileque asegurarse de que el shell de invocación no cambiófooantes de invocar su script. Puede agregar controles de seguridadfilepara asegurarse de que no esté sujeto, por ejemplo. (No es fácil, pero posible). (bueno, también podrías hacer esas verificaciones en la función foo definida ... pero entiendes ^^ Creo que el método 2 es más limpio). 3)filesolo contendrá lo que se necesita, no más..bashrcsolo se lee mediante shells interactivos. (En realidad, eso es una simplificación excesiva: bash es peculiar a este respecto. Bash no lee.bashrcsi es un shell de inicio de sesión, interactivo o no. Y hay una excepción incluso a la excepción: si el proceso padre de bash esrshdosshd, entonces bash lee.bashrc, ya sea interactivo o no)Coloque las definiciones de sus funciones en un archivo en un lugar conocido y use el
.(sourceincorporado también deletreado ) para incluir ese archivo en un script.Si lo desea, puede seguir la función de carga automática de ksh. Coloque cada definición de función en un archivo con el mismo nombre que la función. Enumere los directorios que contienen las definiciones de funciones en la
FPATHvariable (una lista de directorios separados por dos puntos). Aquí hay una aproximación cruda de kshautoloadque realmente carga la función inmediatamente en lugar de bajo demanda:fuente
¿ Necesitas una función? Si no es así, considere extraer la lógica en un script Bash independiente e independiente en su
$PATH. Por ejemplo, tuve esto en mi~/.bashrc:~/binestá en mi$PATH, así que creé~/bin/wanipcon los siguientes contenidos:Y corrió
chmod 0755 ~/bin/wanippara hacerlo ejecutable. Ahora puedo ejecutarwanipdesde otros scripts.Me gusta tener
wanipun script Bash independiente. Me recuerda que quiero que esta lógica esté generalmente disponible (además de solo en mi sesión interactiva actual de Bash). El script encapsula muy bien la lógica y la documentación para el mismo.fuente