Modo estensibile per creare un programma bash

-1

Ho uno script bash che dovrebbe essere estensibile con funzioni aggiuntive con il minimo cambiamento possibile dello script.

La funzione di base è la seguente. Fa scorrere un elenco di file da controllare. L'idea è che ogni controllo dovrebbe essere indipendente. Un nuovo controllo dovrebbe essere possibile aggiungere con la minima modifica possibile allo script.

Poiché bash è diverso dagli altri linguaggi di programmazione, penso che anche il modo per farlo sia diverso.

Al momento, viene aggiunto un nuovo controllo creando un nuovo script che viene poi aggiunto allo script principale chiamandolo come un comando esterno. Ciò provoca molte modifiche allo script principale. Allo stesso modo lo script principale deve accettare i parametri aggiuntivi per attivare lo script di controllo.

C'è un modo migliore per farlo? Qualche idea?

    
posta Gerhard 02.12.2015 - 18:27
fonte

2 risposte

2

Metti ogni "estensione" in uno script bash separato.

Crea una convenzione di denominazione speciale per loro, come "x. *".

Quando lo script principale si avvia, prima di tutto cerca nella directory "x. *" e crea un elenco di tutti i nomi di file di estensione corrispondenti.

In ogni iterazione del ciclo, quando si ha un file da controllare, scorrere l'elenco dei nomi dei file di estensione e richiamare ciascuna estensione, passandogli il nome file del file da controllare. Crea qualsiasi altra informazione che i filtri potrebbero (o potrebbero non) necessitare per i filtri come variabili d'ambiente. Ogni filtro utilizza qualsiasi sottoinsieme di informazioni di cui ha bisogno.

Naturalmente questo non sarà così facile se ogni estensione ha bisogno di comunicare le informazioni al file di script principale, ma non ci hai detto nulla di questo tipo nella domanda. (In ogni caso, anche questo è fattibile con opzioni speciali che consentono agli script figlio di modificare l'ambiente del genitore.)

    
risposta data 02.12.2015 - 19:30
fonte
0

Quando ho una serie di script correlati, ho quasi sempre messo tutte le funzioni in un file separato, functions.sh . Quindi, ogni script lo invia per primo e, se necessario, può sovrascrivere le funzionalità semplicemente ridefinendo alcune funzioni prima di chiamare la funzione del punto di ingresso con gli argomenti specificati.

Esempio:

functions.sh:

# to be sourced
# ...
do-stuff-with-tool() {
    tool "$@"
}
tool() {
    call-default-tool "$@"
}
# ...

do-stuff-with-default-tool.sh:

#!/bin/bash
set -eu
HERE=$(dirname "$0")
. "$HERE/functions.sh"
do-stuff-with-tool "$@"

do-stuff-with-another-tool.sh

#!/bin/bash
set -eu
HERE=$(dirname "$0")
. "$HERE/functions.sh"
tool() {
    call-another-tool "$@"
}
do-stuff-with-tool "$@"
    
risposta data 11.05.2017 - 09:38
fonte

Leggi altre domande sui tag