In genere consiglierei di seguire il modo di fare le cose di Bourne-again SHell , dato che bash è probabilmente la shell Unix più popolare in circolazione. Bash usa tipicamente &>
o 2>&1
. IMHO, nessuno dei due è "perfetto", quindi consiglio di dimenticare questa assurdità. Realisticamente, quale dovresti usare dipende da cosa stai cercando di fare.
2>&1
unisce stderr a stdout, che può essere utile se, ad esempio, si desidera reindirizzare il testo stderr. Quindi, ad esempio, se vuoi vedere se un programma stampa un certo messaggio stderr, ma non vuoi che lo schermo sia pieno di immondizia (presumibilmente) non importante, potresti fare qualcosa del genere program 2>&1 | grep crashed
, che cercherà lo stdout e lo stderr da un programma chiamato "programma" per la parola "crash".
D'altra parte, se non vuoi che un programma stampi qualcosa, puoi semplicemente eseguirlo program &> /dev/null
, che reindirizzerà sia stderr che stdout a / dev / null, un file speciale che magicamente fa sparire le cose. Oppure, se si desidera salvare l'output di un programma (forse per segnalare un bug o qualcosa del genere), è possibile reindirizzare sia stderr che stdout su un file: program &> log.txt
reindirizzerà tutti i dati su un file chiamato "log.txt". Se lo desideri, puoi reindirizzare lo stdout e lo stderr tramite program 2> log.txt > log.txt
o program 2>&1 | cat > log.txt
, entrambi i quali avrebbero lo stesso effetto dell'utilizzo &>
. Se fai qualcosa del genere program 2>&1 > file
, solo lo stdout verrà reindirizzato, ma lo stderr può comunque essere reindirizzato a un altro programma, come cat, che potrebbe essere reindirizzato come mostrato sopra. Tuttavia, digitando&>
è più semplice di tutti gli esempi precedenti, poiché comporta la digitazione di un minor numero di caratteri (ed è un po 'più facile da leggere per gli esseri umani). Nota che program 2> log.txt > log.txt
potrebbe essere più probabile che funzioni su shell non bash.
PS: se sei preoccupato per le persone che usano altre shell, c'è qualcosa che puoi aggiungere per essere la prima riga della tua sceneggiatura chiamata "numero magico", o "shebang". Questo è essenzialmente un modo per assicurarsi che altri computer (in particolare quelli che eseguono sistemi operativi simili a Unix) sappiano quale programma usare per eseguire uno script. Script diversi usano shebang diversi. Un shebang per uno script bash è simile al seguente:
#!/bin/bash
Se usi quanto sopra come prima riga di un determinato script, bash verrà generalmente usato per eseguire detto script. Ciò renderà molto più difficile per qualcuno eseguire accidentalmente lo script con la shell sbagliata.
PS: Non mentirò: fino ad ora, non sapevo che si potesse usare >&
, ma, per quanto riguarda Bash, sembra che faccia lo stesso &>
. Si impara qualcosa di nuovo ogni giorno.