2012-02-22 13 views
7

Mi piacerebbe sapere che cosa è il & significa nella dichiarazione:che cosa è differenza tra 2> 1>/dev/null e 2> & 1>/dev/null

2>&1 > /dev/null 

suo reindirizzamento stderr su stdout e poi per mordere un po 'ma che cosa è & in esso?

Posso usarlo come:

2>1 >/dev/null 
+2

Certo, se vuoi inviare stderr ad un file chiamato "1". – cHao

+1

Questo aiuto http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/ – KK99

+0

@cHao: ottenuto il punto. – kailash19

risposta

7

Il & significa descrittore di file. Così 2>&1 reindirizza stderr a qualsiasi stdout attualmente punti a, mentre 2>1 reindirizza stderr in un file chiamato 1

Inoltre, i reindirizzamenti accadere in ordine. Quindi, se dici 2>&1 >/dev/null, reindirizza lo stderr per indicare a quale stdout punta attualmente (che è probabilmente un noop), quindi reindirizza lo stdout su/dev/null. Probabilmente vuoi >/dev/null 2>&1

+0

Quindi, e per dire FD. Domanda nella mia mente: allora perché non l'abbiamo usato in caso di 2 (stderr)? ow shell sa che 2 (senza &) è FD? – kailash19

+0

Cosa intendi? La sintassi è fd> file o fd> & fd indipendentemente dai numeri che si stanno utilizzando per gli slot "fd". – tripleee

+1

kailash19: rileggere il post precedente. Si noti che '... mentre 2> 1 reindirizza lo stderr in un file chiamato 1'. Quindi provalo: 'printf" xxx \ n "2> 1; ls -l 1'. Il file è lì (ma vuoto) e xxx è apparso sul tuo schermo. È legale e utile per reindirizzare l'output di stderr in un file, ad esempio 'myCmd 2>/tmp/myCmd.stderr.out.txt', giusto? ma questo è diverso dal manipolare cosa succede a stdout '& 1', e stderr '& 2'. Non è una sintassi completamente intuitiva. Perché non devo usarlo molto spesso, anche per un anno> 10, devo ancora cercare questo se voglio fare qualcosa di nuovo o diverso. Buona fortuna a tutti. – shellter

Problemi correlati