GNU/Linux >> Tutoriels Linux >  >> Linux

Pouvez-vous mettre plusieurs scripts exécutables dans un seul répertoire et, en vous procurant ce répertoire, rendre toutes ces commandes disponibles ?

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)


Linux
  1. Lorsque vous tapez "ls -a", quelle est la signification de "." Et ".."?

  2. Utilisez Rechercher pour trouver certains répertoires et supprimer tous les fichiers qu'il contient sauf un répertoire ?

  3. Sous Unix, puis-je exécuter "make" dans un répertoire sans d'abord accéder à ce répertoire ?

  4. Dois-je mettre une barre oblique après la source et la destination lors de la copie des dossiers

  5. Comment puis-je copier de manière récursive tous les fichiers pdf d'un répertoire (et de ses sous-répertoires) dans un seul répertoire de sortie?

12 commandes amusantes de Linux qui peuvent vous faire rire

Meilleurs ordinateurs portables Linux que vous pouvez acheter pour la maison et le bureau

Comment puis-je faire Ctrl-Z et bg en une seule touche pour que le processus continue en arrière-plan?

Pouvez-vous afficher/lister tous les attributs étendus et comment ?

Existe-t-il un fichier qui existe toujours et qu'un utilisateur "normal" ne peut pas l'afficher ?

Pouvons-nous monter plusieurs disques dans un seul répertoire ?