È buona pratica richiedere una barra in avanti nei nomi delle directory?

9

Voglio chiedere all'utente del mio script bash di passare un percorso di directory come argomento. Quale delle seguenti è una buona pratica di programmazione?

  • Richiedi che l'utente inserisca un trailing / (barra in avanti)
  • Richiedere che un utente non inserisca un trailing / (barra in avanti)
posta Rohit Agarwal 17.06.2011 - 13:11
fonte

5 risposte

27

La best practice è di non assumere né.

Se hai accesso ai programmi di utilità / classi del programma di sviluppo dei percorsi, utilizza questi, se non scrivi il tuo codice per accettare entrambi i formati e agire di conseguenza.

Niente è più fastidioso per l'utente che dover ricordare se aggiungere o meno una barra finale.

    
risposta data 17.06.2011 - 13:13
fonte
10

Poiché bash ignora più barre, puoi tranquillamente presumere che l'utente non abbia inserito una barra finale nel percorso e aggiunga una barra.

cat /etc/hosts

è lo stesso di

cat /////etc//////////hosts

Quindi il tuo script potrebbe apparire così:

echo -n "enter path: "
read path
if [ -f $path/myfile ]
then
  echo "found myfile!"
else
  echo "nope"
fi

e non devi preoccuparti che l'utente inserisca o meno un trailing / nel percorso.

    
risposta data 17.06.2011 - 13:37
fonte
7

Il defunto Jon Postel ha avuto ottimi consigli nella sezione 3.2 di RFC 760 che si applica qui:

In general, an implementation should be conservative in its sending behavior, and liberal in its receiving behavior. That is, it should be careful to send well-formed datagrams, but should accept any datagram that it can interpret (e.g., not object to technical errors where the meaning is still clear).

    
risposta data 17.06.2011 - 15:19
fonte
3

Concettualmente, la barra non fa parte del nome. La barra è solo un delimitatore tra i nomi. La mia home-dir è / home / stefan e non / home / stefan /.

Se non ti aspetti una barra finale, non fallirai se ce n'è una, come già notato da ammoQ. Ma puoi facilmente incollare nomi e variabili, perché non devi citare la barra:

a="/home"
b="stefan"

dir=$a/$b
    
risposta data 17.06.2011 - 14:32
fonte
0

Richiedere che la directory non abbia una barra finale sarebbe estremamente fastidioso per l'uso interattivo sulla console: il completamento automatico con TAB aggiunge automaticamente una barra finale per le directory.

Quindi è certamente necessario consentire che le directory siano specificate con la barra finale.

    
risposta data 03.07.2013 - 14:28
fonte

Leggi altre domande sui tag