Я б, як правило, рекомендував дотримуватися способу ведення Борна знову Шелла , оскільки bash, мабуть, найпопулярніша оболонка Unix там. Bash зазвичай використовує або &>
або 2>&1
. ІМХО, і це не "ідеально", тому я рекомендую забути про ці дурниці. Реально, який саме ви повинні використовувати, залежить від того, що ви намагаєтеся зробити.
2>&1
зливається stderr з stdout, що може бути корисно, якщо, наприклад, ви хочете передати текст stderr. Так, наприклад, якщо ви хочете побачити, чи програма надрукує певне повідомлення stderr, але не хочете, щоб ваш екран був наповнений (імовірно) неважливим сміттям, ви можете зробити щось на кшталт program 2>&1 | grep crashed
якого буде шукати stdout та stderr з програми називається "програма" для слова "розбився".
З іншого боку, якщо ви не хочете, щоб програма взагалі щось друкувала, ви можете просто запустити program &> /dev/null
, який перенаправить і stderr, і stdout на / dev / null, спеціальний файл, який магічно змушує речі зникати. Або, якщо ви хочете зберегти висновок програми (можливо, повідомити про помилку чи щось таке), ви можете перенаправити і stderr, і stdout у файл: program &> log.txt
перенаправить усі дані у файл під назвою "log.txt". Якщо ви цього хочете, ви можете перенаправити stdout і stderr через program 2> log.txt > log.txt
або program 2>&1 | cat > log.txt
, і те і інше матиме такий же ефект, як і використання &>
. Якщо ви робите щось на кшталт program 2>&1 > file
, лише stdout буде переспрямовано, але stderr все одно може бути перенесений на іншу програму, наприклад, cat, яку можна переспрямувати, як показано вище. Однак, набравши текст&>
простіше, ніж будь-який із наведених вище прикладів, оскільки він передбачає введення меншої кількості символів (і людині трохи легше читати). Зверніть увагу, що, program 2> log.txt > log.txt
швидше за все, вони будуть працювати на снарядах без удару.
PS: якщо ви переживаєте за людей, які використовують інші оболонки, є щось, що ви можете додати до першого рядка сценарію, який називається "магічне число" або "шебанг". Це, по суті, спосіб переконатись, що інші комп’ютери (особливо ті, що працюють у операційних системах, подібних Unix) знають, яку програму використовувати для виконання сценарію. Різні сценарії використовують різні шебанги. Шибанг для баш сценарію виглядає так:
#!/bin/bash
Якщо ви використовуєте вище, як перший рядок даного сценарію, bash, як правило, буде використовуватися для виконання зазначеного сценарію. Це комусь значно ускладнить випадкове виконання сценарію з неправильною оболонкою.
PS: Я не буду брехати: до цих пір я не знав, що можна користуватися >&
, але, що стосується bash, то, здається, це робиться так само, як &>
. Ви дізнаєтесь щось нове щодня.