Після запуску exec &>filenameпереходять до стандартного виводу та стандартної помилки оболонки filename. Стандартний вхід - це дескриптор файлу 0 за визначенням, а стандартний вихід - fd 1, а стандартна помилка - fd 2.
Дескриптор файлу не є ні перенаправленим, ні не перенаправленим: він завжди кудись іде (якщо припустимо, що цей дескриптор відкритий). Перенаправити дескриптор файлу означає змінити, куди він йде. Коли ви бігли exec &>filename, stdout та stderr раніше були підключені до терміналу і стали підключені до нього filename.
Існує завжди спосіб звернення до поточного терміналу: /dev/tty. Коли процес відкриває цей файл, він завжди означає керуючий термінал , залежно від того, який він є. Тож якщо ви хочете повернути оригінальний stdout і оболонку цього оболонки, ви можете це зробити, оскільки файл, до якого вони були підключені, все ще є.
exec &>/dev/tty
execконструкція зазвичай використовується в сценаріях, які працюють в підзарядці, щоб перенаправити їх вихід, наприклад, на файл. Я не бачу в цьому використання інтерактивного сеансу.