2011-01-28 2 views
5

df -t nfs $ directoryCome dire (in sh) se una directory è montata su NFS

restituisce due righe di output se la directory è NFS-montato e una riga se non lo è.

Alcune versioni di df danno stato di uscita 1 se non è stato eseguito il montaggio NFS, ma GNU coreutils 5.3.0 non lo fa ...

if [ `df -t nfs . | wc -l` = 2 ]; 

sente poco elegante e colleghi dicono che non è così controllare sufficientemente gli errori. C'è un modo migliore per farlo?

+0

Ho provato alcune opzioni, ma la tua sembra ancora più elegante per me. I tuoi colleghi hanno menzionato gli errori che potrebbero eludere questo metodo? +1 per un bel tentativo. –

+0

OK, ho trovato un problema. Se la prima colonna di output è eccessivamente lunga (ad esempio 'nfs_server:/long/mount/point'), quindi' df' dividerà l'output su due righe e finirai con 'wc -l = 3'. Risolto facilmente cambiando la tua soluzione in 'if [.... -gt 1]'. –

+0

@ShawnChin: Se si applica l'opzione '--portability' /' -P', non verrà eseguito il wrapping di linee lunghe. Perfetto per la lavorazione della macchina. (Testato con 'df (GNU coreutils) 7.4') – RobM

risposta

0

Si può sempre controllare che mtab tenga un record di tutti i filesystem montati in un flatfile, se si usa strace e si guarda che è tutto df fa comunque. Suppongo che potresti anche usare/proc/mounts se lo stai facendo in Linux.

+0

L'uso di'/etc/mtab' richiede molto più analisi/elaborazione. Avrebbe anche esito negativo se la directory di destinazione include un collegamento simbolico a un punto di montaggio. –