Gli argomenti del programma dovrebbero avere interpretazioni miste?

4

Sto sviluppando uno strumento da riga di comando che ha molte opzioni utente. Alcune delle opzioni sono elenchi di valori. Mi piacerebbe che il programma fosse in grado di analizzare queste opzioni elencate direttamente dalla riga di comando e tramite un file (ad esempio --opt = valA, valB e --opt = vals.txt).

È preferibile avere due opzioni separate per ogni caso o il programma interpretare gli argomenti in fase di esecuzione? Ho visto i programmi farlo in entrambi i modi, ma non riesco a decidere quale sia il design migliore (se esiste una ragione obiettiva).

    
posta Daniel 18.05.2015 - 14:22
fonte

2 risposte

4

Il test da applicare è se qualcuno possa capire definitivamente l'intento degli argomenti semplicemente guardandoli.

Nel tuo esempio, l'interpretazione di --opt=foo varierebbe a seconda dei dintorni del programma. Ciò potrebbe seminare confusione o, peggio, causare un problema di sicurezza se c'è un file chiamato foo nella directory di lavoro corrente e l'intento era foo come letterale. (Questo, per inciso, è perché mettere . o altre directory relative nel percorso di ricerca del programma è considerato non sicuro.)

Ci sono due modi per rendere chiaro l'intento:

  • Utilizza diverse opzioni (ad esempio --opt=foo e --opt-file=bar.txt ).
  • Aggiungi un sigillo all'inizio del valore per indicare che si tratta di un file e non di un valore letterale. Alcuni programmi usano @ (ad esempio --opt=foo e [email protected] ). Questo a scapito di non essere in grado di specificare i letterali a partire da quel personaggio senza sfuggirli.

Entrambi possono essere facilmente aggiunti a un argomento che analizza la libreria o semplicemente gestiti quando si hanno i risultati.

    
risposta data 18.05.2015 - 15:18
fonte
2

Hai visto programmi che interpretano gli argomenti delle opzioni entrambi come nomi di file e come valori letterali? A seconda di cosa, lo stato del file system? È un difetto o uno sfruttamento insidioso che aspetta di accadere. Mai, mai, mai fare questo.

    
risposta data 18.05.2015 - 14:25
fonte

Leggi altre domande sui tag