Je prévois de créer une fonction qui simplifierait les choses pour moi. La fonction serait quelque chose comme
function lazymode()
{
echo "Hello World!";
}
de sorte que lorsque j'utilise la commande lazymode
dans le Shell, le résultat sera le Hello World!
.
Quel fichier dois-je mettre la fonction définie par l'utilisateur?
Dépend de la fonction. Si c'est juste une ligne très simple comme celle-là, vous pouvez créer un alias ou coller la fonction dans ~/.bashrc
(un fichier que bash charge au début).
Si vous créez quelque chose de plus charnu, il pourrait être plus judicieux de créer son propre script exécutable dans ~/bin/
qui n'existera pas par défaut (il ne s'agit que d'un répertoire) mais qui devrait se trouver dans votre chemin. N'oubliez pas que pour cela, le fichier doit être exécutable (chmod +x filename
) et commence par une strophe #!/bin/bash
appropriée.
La deuxième voie présente des avantages évidents:
~/bin/
est également dans le chemin de ce Shell (ce qui devrait être dans la plupart des cas, autant que je sache).Le meilleur choix serait le fichier ~/.bashrc
.
Vous pouvez écrire vos définitions de fonctions Shell directement dans votre fichier ~/.bashrc
ou, si vous en avez beaucoup et que vous ne voulez pas encombrer votre fichier ~/.bashrc
, vous pouvez toutes les placer dans un autre fichier de votre choix. source that fichier dans votre fichier ~/.bashrc
. Par exemple, si le fichier contenant vos fonctions s'appelle bash_functions
, ajoutez simplement dans votre fichier ~/.bashrc
les lignes suivantes:
if [[ -f /path/to/bash_functions ]]; then
source /path/to/bash_functions
fi
ou équivalent:
if [[ -f /path/to/bash_functions ]]; then
. /path/to/bash_functions
fi
où .
est juste une représentation symbolique de source
. Le test if
vérifie que le fichier /path/to/bash_functions
existe avant de tenter de le générer.
Cette technique est très similaire à l’établissement d’alias dans ~/.bashrc
en créant un fichier appelé ~/.bash_aliases
et en utilisant une syntaxe similaire à celle décrite ci-dessus dans ~/.bashrc
pour en vérifier l’existence, puis la rechercher.
Voici une procédure essentielle pour déclarer une fonction permanente:
Ouvrez le fichier ~/.bashrc
dans un éditeur de texte. L’éditeur de texte importe peu, tant que vous savez comment vous en servir et que vous ouvrez le /home/<username>/.bashrc
À la fin du ~/.bashrc
, déclarez votre propre fonction, par exemple:
find_dirs(){
find "$1" -type d
}
Enregistrez et fermez le fichier.
Le fichier ~/.bashrc
est lu à chaque fois que vous ouvrez Shell interactif (nouvel onglet de terminal, connexion via ssh
ou ouverture de TTY1 ou d’une autre console virtuelle). Cela ne sera pas disponible dans les fichiers de script, car ~/.bashrc
n'est pas lu pour les shells non interactifs. Il n'est également pas disponible si vous exécutez bash
avec l'option --norc
.
Si vous souhaitez que la fonction soit disponible immédiatement dans l'onglet actuellement ouvert, utilisez la commande source ~/.bashrc
.
Les fonctions prennent des arguments comme des commandes normales. Par exemple, $1
à $9
indique les paramètres de position lorsque vous appelez une fonction. Dans l'exemple ci-dessus, find_dirs
prend un paramètre de position uniquement et serait appelé find_dirs /etc
. Vous pouvez également utiliser $@
pour faire référence à tous les paramètres de position. Les fonctions acceptent également la redirection. Vous pouvez appeler une fonction avec find_dirs $1 > /dev/null
; nous pourrions aussi le déclarer comme suit:
find_dirs(){
find "$1" -type d
}
Note de man bash
: "Les fonctions sont exécutées dans le contexte du shell actuel; aucun nouveau processus n'est créé pour les interpréter". Cela signifie que vous devez également connaître les fonctions permettant de modifier votre environnement d'exécution du shell, à savoir les variables et les paramètres de terminal.