Как вы помните синтаксис для перенаправления 2> и 1

У вас есть мнемоника или система? Это беспокоило меня в течение многих лет, я всегда должен искать это

  • является ли Linux перенаправлением «>>» медленнее с большими файлами?
  • Как я могу захватить вывод экрана в именованный файл по команде по базам команд?
  • io перенаправление на «крест» 2 программы
  • Почему выход не перенаправляется в файл?
  • Что случилось с этим использованием перенаправления?
  • Перенаправление после запуска процесса
  • Восстановление вывода на терминал после выдачи «exec &> filename»
  • Как отправить надстройку stdout в multilog и второй процесс
  • 7 Solutions collect form web for “Как вы помните синтаксис для перенаправления 2> и 1”

    Если вы программист C, вы можете думать о &1 как «адрес 1», поэтому 2>&1 читает «перенаправить файловый дескриптор № 2 на то же место, что и # 1».

    «От двух до одного» («до») более логично для меня, чем «Два и один», что я обычно смущаю. Если вы считаете, что «и одно» как одно существительное (место), оно также делает грамматический смысл в контексте, что сложнее сделать с «двумя и одним» – вам нужно было бы рассмотреть «один» один существительное, и это все равно не будет иметь контекстуального смысла.

    Не мнемоника, но я читал ее следующим образом:

    0 – stdin. 1 – стандартный вывод. 2 – stderr. > в. < is out. & является файловым дескриптором (в некоторых оболочках).

     2>&1 2 > & 1 stderr into file descriptor 1 redirect stderr into stdout 

    Это может измениться, если вы столкнулись с любым файловым дескриптором до перенаправления …

     2>somefile 1>&2 2 > somefile 1 > &2 stderr into somefile and stdout into file descriptor 2 redirect stderr into somefile and stdout into somefile. 

    Когда вы пишете 2>&1 , вы говорите: «стандартная ошибка идет на стандартный вывод».

    Давайте сломаем это.

    Сначала вы хотите запомнить, что стандартная ошибка равна 2 а стандартный выход – 1 .

    Итак, у вас есть что-то 1 .

    «идет» написано.

    Итак, у вас есть 2> что-то 1 .

    2>filename означает отправку стандартной ошибки в filename . Но вы не хотите отправлять его в файл с именем 1 . Вам нужно что-то еще: номер файла, который уже открыт. Это то, за что.

    Итак, 2>&1 .

    Вы также можете думать об этом, как будто вы выполняете задание, где the > равно как equals, а & is like a $ , compare:

     f=$1 2>&1 

    Чтобы понять командную строку с несколькими переадресациями, важно знать, что перенаправления выполняются слева направо. См. « Порядок перенаправления» для получения более подробной информации об этом.

    Я помнил, что это всегда 2 -> 1. Stderr to stdout.

    Средняя часть всегда сложная, и я всегда ее испортил, пока не вспомнил, что вначале появляется острый персонаж > , а затем персонаж, которого я не могу писать в реальной жизни.

    Поэтому никогда 2&>1 , всегда 2>&1

    Если вы понимаете, что FD2 – это STDERR, вы можете подумать: «О, и захватите STDERR, когда я отправляю STDOUT (FD1)».

    Мои коллеги и я обычно говорим, что «два больше одного», потому что большинство из нас не всегда помнит, что stderr является файловым дескриптором 2 а stdout1 (особенно те, которые являются новыми для unix / linux), поэтому другие мнемоники о перенаправлении stderr на самом деле не работает. Проблема только в том, что вы все равно должны помнить, куда идет амперсанд!

    Interesting Posts

    файлы журналов в CentOS 7

    Лучше / предпочтительнее убивать все дочерние процессы с помощью PPID или PGID?

    Как удалить текущую строку на экране GNU (эквивалент bash для Ctrl-K)?

    VPN с iptables и маршрутизацией: порт доступа из локальной сети

    В чем разница между ls и l?

    Как изменить размер шрифта, количество строк / столбцов на терминале

    Как logctl подписывает журналы, если «ключ проверки должен храниться извне»??

    Как установить GRUB в другую папку, чем / EFI / ubuntu?

    TAR дает ошибку – tar: вы не можете указать более одного параметра `-Acdtrux 'или` –test-label'

    Понимание использования диска btrfs для одного объема данных

    В vim, как отобразить «command-right» и «command-left» до начала строки и конца строки на mac?

    Не удается подключиться к Wi-Fi на Debian Jessie с помощью wpa_supplicant: ioctl : неверный аргумент

    установка SD-карты без перегородки

    Обнаружение компьютерных моделей, например, поставщика

    удаление строки из файла с помощью grep или sed, но количество строк все равно одинаково

    Linux и Unix - лучшая ОС в мире.