Je veux mettre un tas de scripts exécutables dans le répertoire .command (qui est également exécutable), puis je n'ai plus qu'à sourcer ce répertoire dans mon .bash_profile. Est-ce possible? Je peux faire fonctionner cela avec un seul fichier. Mais lors de l'ajout d'un second fichier, les commandes du second fichier ne sont pas disponibles dans le shell.
mon .bashprofile
source ~/.commands/*
mon dossier .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
contenu de court
echo 'a short program'
concours de server_utils.sh
function upfile {
scp $1 [email protected]:~/
}
Entrée et sortie du shell.
$ hello
hello
$ short
-bash: short: command not found
Réponse acceptée :
Vous ne pouvez pas faire cela avec une seule source
. Le premier argument est pris comme nom de fichier, les autres apparaissent comme les paramètres positionnels $1
, $2
… dans le script source.
$ cat test.src
echo hello $1
$ source test.src there
hello there
Mais vous pouvez le faire avec une boucle :
for f in ~/commands/*.src; do
source "$f"
done
(En passant, avoir des trucs comme ça n'incluant que des fichiers avec une certaine extension est très utile si vous utilisez un éditeur qui laisse les fichiers de sauvegarde avec un ~
à la fin . Les copies de sauvegarde ne deviennent alors pas accidentellement actives.)
Cependant, notez que si vous avez un script source qui contient des commandes simples (comme ça echo
ci-dessus ou votre short
), ils seront exécutés lorsque le script sera source
ré. Ils ne génèrent aucune fonction dans le shell de sourcing.
$ 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 vous voulez avoir des scripts exécutables à la place, le genre où le script s'exécute lorsque vous donnez son nom en tant que commande, placez-les quelque part dans PATH
(Je suggérerais d'utiliser ~/bin
pour cela), donnez-leur la permission d'exécution et mettez les hashbangs appropriés au début des scripts (#!/bin/sh
ou #!/bin/bash
ou autre)