Ik kom het regelmatig tegen in scripts. En ik weet in grote lijnen wat het is. Het is zogenaamde output redirection. Naast de input STDIN is er ook de standaard uitvoer STDOUT en standaard foutuitvoer STDERR. Ze worden ook wel weergegeven door getallen, respectievelijk 0, 1 en 2.
Output vind altijd plaats naar STDOUT. Iedereen die wel eens een shell- of batch-script heeft geschreven is wel bekend met het sturen van STDOUT naar bijvoorbeeld een logfile:
echo "Hello world!" > C:test.txt
Wanneer een fout optreedt, wordt de output naar STDERR verzonden. Om dit te versturen naar bijvoorbeeld een logfile, gebruik je 2> C:test2.txt. Wil je de fout niet naar een eigen logfile sturen, maar naar dezelfde locatie als STDOUT, dan gebruik je 2> &1
Het complete commando wordt dan bijvoorbeeld echo "Hello world!" > C:test.txt 2> &1
Ook hier kan gekozen worden voor schrijven naar (logfile wordt eerst opgeschoond) door middel van
echo "Hello world!" > C:logfile.txt 2> &1
Of door toevoegen aan bestaand bestand
echo "Hello world!" >> C:logfile.txt 2>> &1
> /dev/null2/> &1 word bij mijn weten vaak in cronjobs toegepast.
Het is volgens mij niet meer dan een redirect achtig iets naar een (in dit geval) blackhole, waardoor je niet allemaal mailtjes van je cron krijgt of van die irritante 0kb files in je root.
het resultaat is in ieder geval een werkende cron zonder irritante output what so ever…
Daar heb je gelijk in. Wat niet in het verhaal goed naar voren komt, is dat hiermee onderscheid kan maken tussen wenselijke en, zoals jij het noemt, irritante output. Je kan standaard (als in niet-fout) output naar dev/null sturen en fouten naar een logfile.
script 1> /dev/null 2>> /var/log/script-errors.log
Als het script correct is geschreven, heb je op deze wijze alleen nuttige output.
(Tenzij je niet van plan bent om iets met de meldingen te doen, dan kan je de foutmeldingen naar /dev/null sturen. ;-))