Tal vez estoy mirando esto de la manera incorrecta ... Pero aquí estoy lo que estoy tratando de hacer. Realizo la mayor parte de mi trabajo con Java pero solo cambié a un entorno unix (bash). Yo estoy haciendo esto:
[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash
ls2(){
echo "Hello World"
}
ls3(){
echo "Testing"
}
echo "this is a test"
ls2 # this calls a function
[~/Desktop/bashPlay]% myFunc
this is a test
Hello World
Pero tengo dos funciones en mi archivo y quiero poder llamarlas por separado desde la línea de comandos. Es decir: myFunc.ls2()o incluso solo ls2. Sé que puedo agregar las funciones a mi .bashrcarchivo, pero ¿hay alguna otra forma de ejecutar estas funciones sin agregarlas a mi .bashrc?

Otro enfoque sería crear un script llamado
functions.sh(en el~/bindirectorio, por ejemplo).En este script, agrega todas sus definiciones de funciones personales (digamos que cada vez que agrega una función la agrega a este archivo ...)
Finalmente solo tiene que agregar la
source ~/bin/functions.shlínea a su.bashrcarchivo. De esta manera podrá llamarlos desde la línea de comandos,.bashrcpermanecerá limpio y tendrá un lugar específico para sus funciones personales.fuente
Si eres como yo, no quieres saturar tu entorno con funciones. También tiene un grupo de funciones que pertenecen juntas en términos de lo que hacen, por lo que tiene sentido colocarlas en el mismo archivo de script. (Sé que una carpeta con varios archivos podría servir para el mismo propósito). Aquí hay una posible solución que le permite llamar a una función específica en el script:
fuente
sourceeso, ya que puede manejar tener dos funciones del mismo nombre en dos archivos sh diferentes. Lo refiné para manejar una cantidad arbitraria de parámetros reemplazándolos$1 $2 $3 $4 $5conFUNC_CALL=$1; shift; $FUNC_CALL "$@""$@". PD: su enfoque es realmente incorrecto; la última parte debe ser"$FUNC_CALL" "$@"(es decir,$FUNC_CALLdebe estar entre comillas)."$FUNC_CALL"?El operador de punto o
sourceincorporadobashes análogo a laimportdeclaración en Java.Puede leer más sobre el operador de punto o el
sourceincorporado .fuente