Quiero poner un montón de scripts ejecutables en el directorio .command (que también es ejecutable), y luego solo tengo que buscar ese directorio en mi .bash_profile. es posible? Puedo hacer que esto funcione con un archivo. Pero al agregar un segundo archivo, los comandos del segundo archivo no están disponibles en el shell.
mi .bashprofile
source ~/.commands/*
mi carpeta .commands
-rwxr-xr-x 1 christopherreece staff 108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x 1 christopherreece staff 23 Dec 14 09:04 short
contenido del corto
echo 'a short program'
concursos de server_utils.sh
function upfile {
scp $1 [email protected]:~/
}
Entrada y salida de shell.
$ hello
hello
$ short
-bash: short: command not found
Respuesta aceptada:
No puedes hacer eso con una source
. El primer argumento se toma como el nombre del archivo, los otros aparecen como parámetros posicionales $1
, $2
… en el script original.
$ cat test.src
echo hello $1
$ source test.src there
hello there
Pero podrías hacerlo con un bucle:
for f in ~/commands/*.src; do
source "$f"
done
(Aparte, tener cosas como esa que incluyan solo archivos con una cierta extensión es bastante útil si usa un editor que deja los archivos de copia de seguridad con un final ~
. Entonces, las copias de seguridad no se activan accidentalmente).
Aunque tenga en cuenta que si tiene un script de origen que contiene comandos sencillos (como ese echo
arriba o su short
), se ejecutarán cuando el script sea source
d. No generan ninguna función en el shell de abastecimiento.
$ cat test2.src
echo "shows when sourced"
func() {
echo "shows when function used"
}
$ source test2.src
shows when sourced
$ func
shows when function used
Si desea tener secuencias de comandos ejecutables en su lugar, del tipo en el que se ejecuta la secuencia de comandos cuando proporciona su nombre como un comando, colóquelos en algún lugar de PATH
(Sugeriría usar ~/bin
para eso), déles el permiso de ejecución y coloque los hashbangs adecuados al comienzo de los scripts (#!/bin/sh
o #!/bin/bash
o lo que sea)