Qual è il modo migliore per archiviare le configurazioni del codice shell / script da eseguire in seguito?

1

Sto lavorando su uno strumento (Python, può o non può essere importante) che consentirà a un utente di mantenere un file di configurazione contenente shell e / o codice di linguaggio arbitrario da eseguire su particolari eventi e intervalli. Il codice potenzialmente coinvolgerà più istruzioni.

Capisco che ci sono potenziali rischi comportamentali e di sicurezza associati all'esecuzione di codice arbitrario da un file, ma non penso che questo sia un problema perché il file di configurazione è gestito solo dall'utente finale. Tuttavia, fammi sapere se trascuro qualcosa di importante.

La mia domanda principale: qual è il modo migliore per archiviare questo codice in modo configurabile?

Alcuni concetti che sto considerando di memorizzare il codice ...

In un file di configurazione condiviso (che molte librerie Python già cercano):

# setup.cfg
[my_program]
command_1 = cd /tmp && touch foobar

In un file YAML:

# my_program.yaml
command_1: cd /tmp && touch foobar

In un file sorgente come argomenti a subprocess.call() :

# settings.py
command_1 = [['cd', '/tmp'], ['touch', 'foobar']] # requires special handling of 'cd'

In un file sorgente come funzione:

# settings.py
import os
import subprocess
def command_1():
    os.chdir('/tmp')
    subprocess.call(['touch', 'foobar'])
    
posta Jace Browning 12.07.2013 - 05:48
fonte

3 risposte

2

Che ne dici di memorizzare i comandi in un file eseguibile effettivo? L'utente finale crea uno script bash / python / ruby e tutto ciò che forniscono alla tua configurazione è il nome dello script da eseguire.

Ciò consente allo script di essere arbitrariamente semplice o complesso e consente inoltre all'utente finale di utilizzare qualsiasi linguaggio di scripting supportato dal proprio ambiente.

Infine, avranno bisogno di permessi per rendere eseguibile il file di script affinché funzioni, il che significa che hanno già le autorizzazioni per creare ed eseguire comunque uno script.

    
risposta data 12.07.2013 - 07:58
fonte
1

Bene, per il tuo script di esempio solo i primi due metodi funzioneranno. Ha un cd in esso, e quindi i due comandi devono far parte dello stesso script di shell.

Pertanto, se si desidera utilizzare comandi che hanno la forma di uno script di shell, è necessario memorizzarli comunque sotto forma di stringa. Se il codice che desideri memorizzare potrebbe allungarsi, YAML potrebbe essere l'idea migliore, poiché può gestire meglio le stringhe multi-linea.

    
risposta data 12.07.2013 - 09:25
fonte
0

Un'opzione che sto considerando è che gli utenti creano un Makefile con nomi di destinazione specifici.

I vantaggi:

  • tutti i comandi sono testabili localmente

Svantaggi:

  • richiede make
risposta data 14.07.2013 - 15:48
fonte

Leggi altre domande sui tag