web-dev-qa-db-fra.com

Fonction vide dans BASH

J'utilise l'outil FPM pour créer un package .deb. Cet outil crée avant/après la suppression du package des fichiers pris en charge.

Malheureusement, le script bash généré par FPM contient une telle fonction

dummy() {
}

Et ce script se termine avec une erreur:

Erreur de syntaxe, inattendue

BASH n'autorise pas les fonctions vides? Quelle version de bash/linux a cette limitation?

33
user3550394

Vous pouvez utiliser : qui équivaut à true et est principalement utilisé comme opérateur ne rien faire ...

dummy(){
     : 
  }
38
orestiss

Une fonction bash vide peut être illégale. La fonction contient uniquement des commentaires sera également considérée comme vide.

un ":" (commande null) peut être placé dans la fonction si vous voulez "NE RIEN FAIRE"

voir: http://tldp.org/LDP/abs/html/functions.html

8
YangwuWang

Une doublure

dummy(){ :; }


: est la commande null

; est nécessaire dans le format d'une ligne

6
JobJob

Je recommande celui-ci:

dummy(){ unused(){ :;} }


Si tu utilises : commande null, elle sera imprimée par l'option xtrace:

(
    set -o xtrace
    dummy(){ :; }
    dummy "null command"
)

echo ------

(
    set -o xtrace
    dummy(){ unused(){ :;} }
    dummy "unused function"
)

production:

+ dummy 'null command'
+ :
------
+ dummy 'unused function'

Pour le débogage, j'utilise un wrapper comme celui-ci:

main() {(
    pwd # doing something in subshell
)}

print_and_run() {
    clear
    (
        eval "$1() { unused() { :; } }"
        set -o xtrace
        "$@"        
    )
    time "$@"
}

print_and_run main aaa "bb bb" ccc "ddd"
# output:
# + main aaa 'bb bb' ccc ddd
# ..
0
Damian Trzeciak