Si j'ai un fichier:
dome.sh
$ls -l dome.sh
-rwxrwxr-x 1 user user 0 Aug 8 11:19 dome.sh
et le contenu du fichier est similaire à:
#!/bin/bash
function() {
'work'
}
another() {
'different work'
}
...
#30 functions later
yetANOTHERfunction () {
'even more work'
}
où "# 30 fonctions plus tard" signifie qu'il y a 30 fonctions supplémentaires uniques
Puis-je en quelque sorte parcourir toutes les fonctions de ce script pour les identifier?
quelque chose comme:
for i in $(get all functions in this file); do
echo $i
done
produire:
function
another
...
yetANOTHERfunction
bash
shell-script
bash-scripting
spezticle
la source
la source
cut
comme ceci:declare -F | cut -d ' ' -f3
.Essayer:
Explication:
Plutôt que d’analyser vous-même les fonctions, laissez-les
bash
analyser (avecsource
) et vider le contenu (typeset -f
).L'invocation
env -i bash --noprofile --norc
est destinée à empêcher labash
lecture de fichiers d'initialisation. Sinon, vous pourriez obtenir des fonctions définies dans, par exemple,~/.bashrc
.typeset -f
va vider toutes les fonctions et leurs définitions. Chaque définition commence par: nom de la fonction , l' espace ,()
, l' espace , nouvelle ligne .grep
etawk
extraire les noms de fonction de ces lignes.La raison du filtre est que vous pouvez obtenir des faux positifs lorsque vous avez des fonctions telles que:
Ici, la
while
boucle serait imprimée par erreura
, mais le filtre s'en occupe.Modifié pour imprimer des fonctions à partir d’un fichier et éviter d’inclure les fichiers de démarrage.
la source
declare -f
sans aucun autre argument dans le script d’intérêt pour obtenir une liste des définitions de fonction qu’il contient . En d'autres termes, si vous avez ajouté la ligne declare -f au bas d'un script et que vous l'avez obtenue à partir d'un shell, les définitions de fonction, dans ce script uniquement, seront exportées vers le terminal. Il affiche le nom de la fonction ainsi que le corps. Ainsi, si vous voulez juste le nom, vous devrez diriger cette sortie via sed / grep. c'est-à-dire argument).declare
ettypeset
sont la même commande. 2) Toutes les fonctions de votre shell (pas nécessairement du fichier d’intérêt) apparaissent dans la sortie. C'est le deuxième point ci-dessus.