Zasadniczo poleciłbym postępowanie Bourne'a ponownie , ponieważ bash jest prawdopodobnie najpopularniejszą powłoką uniksową. Bash zwykle używa albo &>
albo 2>&1
. IMHO, żadne nie jest „idealne”, więc polecam zapomnieć o tych bzdurach. Realistycznie, który powinieneś użyć, zależy od tego, co próbujesz zrobić.
2>&1
łączy stderr z stdout, co może być przydatne, jeśli na przykład chcesz przesłać tekst stderr. Na przykład, jeśli chcesz zobaczyć, czy program drukuje określoną wiadomość stderr, ale nie chcesz, aby twój ekran był wypełniony (prawdopodobnie) nieistotnymi śmieciami, możesz zrobić coś takiego program 2>&1 | grep crashed
, co przeszuka stdout i stderr z programu nazywany „programem” dla słowa „rozbił się”.
Z drugiej strony, jeśli nie chcesz, aby jakiś program w ogóle coś drukował, możesz po prostu uruchomić program &> /dev/null
, co przekieruje zarówno stderr, jak i stdout do / dev / null, specjalnego pliku, który magicznie znika. Lub, jeśli chcesz zapisać dane wyjściowe programu (być może w celu zgłoszenia błędu lub czegoś), możesz przekierować zarówno stderr, jak i stdout do pliku: program &> log.txt
przekieruje wszystkie dane do pliku o nazwie „log.txt”. Jeśli chcesz, możesz przekierować stdout i stderr przez program 2> log.txt > log.txt
lub program 2>&1 | cat > log.txt
, z których oba miałyby taki sam efekt jak użycie &>
. Jeśli zrobisz coś podobnego program 2>&1 > file
, tylko stdout zostanie przekierowany, ale stderr może nadal zostać przekierowany do innego programu, takiego jak cat, który może zostać przekierowany, jak pokazano powyżej. Jednak pisanie&>
jest łatwiejszy niż jakikolwiek z powyższych przykładów, ponieważ polega na wpisywaniu mniejszej liczby znaków (i jest nieco łatwiejszy do odczytania przez ludzi). Pamiętaj, program 2> log.txt > log.txt
że bardziej prawdopodobne jest, że zadziała na powłokach innych niż bash.
PS: jeśli martwisz się, że ludzie używają innych powłok, możesz dodać coś, co będzie pierwszą linią skryptu, zwaną „magiczną liczbą” lub „shebang”. Jest to zasadniczo sposób na upewnienie się, że inne komputery (szczególnie te z systemem operacyjnym Unix-podobnym) wiedzą, jakiego programu użyć do wykonania skryptu. Różne skrypty używają różnych shebangów. Shebang dla skryptu bash wygląda następująco:
#!/bin/bash
Jeśli użyjesz powyższego jako pierwszego wiersza danego skryptu, bash będzie ogólnie używany do wykonania tego skryptu. To znacznie utrudni komuś przypadkowe wykonanie skryptu z niewłaściwą powłoką.
PS: Nie będę kłamał: do tej pory nie wiedziałem, że można go użyć >&
, ale jeśli chodzi o bash, wydaje się, że działa tak samo jak &>
. Codziennie uczysz się czegoś nowego.