GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puede colocar varios scripts ejecutables en un directorio y, al obtener ese directorio, hacer que todos esos comandos estén disponibles?

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)


Linux
  1. 9 directorios de Linux que debes respaldar y uno que no debes

  2. En Unix, ¿puedo ejecutar 'make' en un directorio sin hacer cd en ese directorio primero?

  3. ¿Cómo mover (y sobrescribir) todos los archivos de un directorio a otro?

  4. ¿Cómo puedo hacer que bazel use almacenamiento externo al construir?

  5. ¿Cómo puedo hacer Ctrl-Z y bg en una sola pulsación de tecla para que el proceso continúe en segundo plano?

12 divertidos comandos de Linux que pueden hacerte reír

Las mejores computadoras portátiles Linux que puede comprar para uso doméstico y de oficina

¿Puedes cambiar el permiso a todos los archivos excepto a un directorio en Linux?

bash comandos que no caben en una página - hacer que la salida sea desplazable

¿Hay un archivo que siempre existe y un usuario 'normal' no puede acceder a él?

¿Podemos montar varios discos como un directorio?