Что делает & amp; означает точно в перенаправлении вывода?

Сегодня я столкнулся с такой же проблемой, что и в Ubuntu 14.10. Перезагрузилось и неожиданно появилось больше приложений в тире, и ни одно из предлагаемых решений (удалить кеш, переустановить линзы, удалить данные zeitgeist) не сработало для меня.

К счастью, я вспомнил одно изменение системы Я применил несколько часов до этого: я изменил свою локаль с de_DE.UTF-8 до de_DE с помощью:

sudo update-locale LANG=de_DE

Итак, если ни одно из решений не работает, попробуйте изменить свой язык на unicode -Ваш один. Для меня это было:

sudo update-locale LANG=de_DE.UTF-8

, а затем перезагрузка. Все работает как ожидается.

14
задан 25 September 2017 в 02:04

9 ответов

& в 2>&1 просто говорит, что число 1 является файловым дескриптором, а не именем файла. В этом случае standard output file descriptor.

Если вы используете 2>1, это приведет к перенаправлению ошибок в файл с именем 1, но если вы используете 2>&1, он отправит его в папку [ f11].

Это &> говорит, что отправляет оба, standard output и standard error, где-то. Например, ls <non-existent_file> &> out.file. Позвольте мне проиллюстрировать это на примере.

Setup:

Создайте файл koko со следующим содержимым:
#!bin/bash

ls j1
echo "koko2"
Сделайте его исполняемым: chmod u+x koko Теперь обратите внимание, что j1 не существует. Теперь запустите ./koko &> output run cat output, и вы увидите
ls: cannot access 'j1': No such file or directory
koko2

Оба, standard error (ls: cannot access 'j1': No such file or directory) и standard output (koko2) отправлены к файлу output.

Теперь запустите его снова, но на этот раз:

./koko > output

Сделайте cat output, и вы увидите только koko2. Но не ошибка, выводимая командой ls j1. Это будет отправлено на standard error, которое вы увидите в своем терминале.

Важное замечание благодаря @Byte Commander:

Обратите внимание, что в command >file 2>&1 порядок перенаправления это важно. Если вместо этого вы напишете command 2>&1 >file (что обычно не то, что вы хотите), оно сначала перенаправит файл stdout команды в файл и после этого перенаправит команду stderr в ее неиспользованную stdout команду, поэтому она покажет в терминал, и вы можете его переправить или перенаправить, но он не будет записан в файл.

20
ответ дан 22 May 2018 в 18:09
  • 1
    Что означает &>? – Aruka J 25 September 2017 в 02:07
  • 2
    Обратите внимание, что в command >file 2>&1 порядок перенаправления важен. Если вместо этого вы напишете command 2>&1 >file (обычно это не то, что вы хотите), оно сначала перенаправит stdout команды в файл и после этого перенаправит stderr команды к его неиспользуемому стандарту stdout, поэтому он появится в терминале, и вы может передать его или перенаправить снова, но он не будет записан в файл. – Byte Commander 25 September 2017 в 13:24
  • 3
    «Это будет отправлено на standard output, которое вы увидите в своем терминале. " не должно ли это быть «к standard error»? – frarugi87 25 September 2017 в 16:32
  • 4
    Да @ frarugi87 Ваше право исправлено – George Udosen 25 September 2017 в 16:38
  • 5
    @George ничего себе, вы были быстры;) Хорошая работа – frarugi87 25 September 2017 в 16:39

& в 2>&1 просто говорит, что число 1 является файловым дескриптором, а не именем файла. В этом случае standard output file descriptor.

Если вы используете 2>1, это приведет к перенаправлению ошибок в файл с именем 1, но если вы используете 2>&1, он отправит его в папку standard output stream.

Это &> говорит, что отправляет оба, standard output и standard error, где-то. Например, ls <non-existent_file> &> out.file. Позвольте мне проиллюстрировать это на примере.

Setup:

Создайте файл koko со следующим содержимым: #!bin/bash ls j1 echo "koko2" Сделайте его исполняемым: chmod u+x koko Теперь обратите внимание, что j1 не существует. Теперь запустите ./koko &> output run cat output, и вы увидите ls: cannot access 'j1': No such file or directory koko2

Оба, standard error (ls: cannot access 'j1': No such file or directory) и standard output (koko2) отправлены к файлу output.

Теперь запустите его снова, но на этот раз:

./koko > output

Сделайте cat output, и вы увидите только koko2. Но не ошибка, выводимая командой ls j1. Это будет отправлено на standard error, которое вы увидите в своем терминале.

Важное замечание благодаря @Byte Commander:

Обратите внимание, что в command >file 2>&1 порядок перенаправления это важно. Если вместо этого вы напишете command 2>&1 >file (что обычно не то, что вы хотите), оно сначала перенаправит файл stdout команды в файл и после этого перенаправит команду stderr в ее неиспользованную stdout команду, поэтому она покажет в терминал, и вы можете его переправить или перенаправить, но он не будет записан в файл.

20
ответ дан 18 July 2018 в 06:16

клавиши [F4] В 2>&1 просто говорит о том, что количество 1 - это дескриптор файла, а не Имя файла. В этом случае standard output file descriptor.

если вы используете [F8], после этого перенаправление ошибок в файл с именем 1 но если вы используете 2>&1, то он направит его на [F11].

это &> говорит послать обоих, [от f13] и standard error, где-то. Например, ls <non-existent_file> &> out.file. Позвольте мне проиллюстрировать это на примере.

Установка:

создать файл koko со следующим содержанием: #!bin/bash ls j1 echo "koko2" сделайте его исполняемым: [f17 в] заметим, что j1 не существует теперь запустите [зг19] работать [20 фунтов], и вы увидите, ls: cannot access 'j1': No such file or directory koko2

как, [клавиши f21] (ls: cannot access 'j1': No such file or directory) и standard output (koko2), были отправлены в файл [f25 привод датчика].

теперь запустите его снова, но на этот раз вот так:

./koko > output [dиода d17]сделать cat output и вы увидите только koko2 как. Но не Выходная ошибка из ls j1 команда. Что будут посланы на standard error, который вы увидите в своем терминале.[!dиода d17]

важное замечание, спасибо @командира байт:

заметим, что в command >file 2>&1 порядок перенаправления важно. Если вы пишете command 2>&1 >file вместо (который обычно не то, что вы хотите), он сначала перенаправляет команды [f32 из] в файл и после этого перенаправить команды stderr его теперь неиспользованный stdout, поэтому он будет отображаться в терминале, и вы могли бы трубку или перенаправить его снова, но он не будет записан в файл.

20
ответ дан 24 July 2018 в 18:34

> FILE 2>&1 и &> FILE эквивалентны. См. 8.2.3.2. Перенаправление ошибок в руководстве Bash для начинающих Глава 8

4
ответ дан 22 May 2018 в 18:09
  • 1
    IIRC &> FILE относится только к Bash, тогда как >FILE 2>&1 понимается большим количеством оболочек. – Byte Commander 25 September 2017 в 02:08
  • 2
    @ByteCommander, ох, я даже не знал, что у bash была такая стенография ... Я всегда использовал 2 & gt; & amp; 1. – psusi 25 September 2017 в 03:24

[n]>&word называется дублированием дескриптора выходного файла (см. раздел 2.7.6 стандарта языка оболочки POSIX). Это конкретное поведение является особенностью борнеподобных оболочек, включая ksh, dash и bash; на самом деле стандарт основан на оболочке Борна и ksh. Изучая руководства tcsh и csh, они, по-видимому, не предоставляют возможности дублирования дескриптора файла, однако из описания >& это ведет себя как &> в bash (то есть перенаправляет ошибки и нормальный вывод в файл) .

В системах типа * nix, включая Ubuntu, вы часто слышите, что все это файл, а точнее раздел 2.7.6 . Стандартный вывод - это постоянный файловый дескриптор 1, а стандартная ошибка - файловый дескриптор 2. Таким образом, > FILE 2>&1 технически означает дубликат дескриптора файла 2 на дескриптор файла 1. Другими словами, этот ответ:

2> & amp; ; 1 сообщает оболочке дать команде дескриптор файла 2, который является дубликатом дескриптора 1. (т. Е. Stderr & amp; stdout указывает на тот же fd).

Ключевым моментом здесь является указание, что дескриптор 1 должен быть установлен первым. Поскольку shell обрабатывает перенаправления в порядке слева направо, команда command >FILE 2&1 сообщает оболочке об обновлении stdout для command, чтобы сначала войти в FILE, и только тогда дескриптор 2 может стать копией 1, то есть 1 и 2 точки к тому же location - FILE.

Это, конечно, выходит за рамки стандартной ошибки и стандартного вывода. Как показано в в этом ответе , выполнив 3&>2

2> & amp; 1 сообщает оболочке дать команде дескриптор файла 2, который является дубликатом дескриптор 1. (т. е. stderr & amp; stdout указывает на тот же fd).

... вы дублируете (dup2) filedescritor 2 на filedescriptor 3, возможно, закрываете filedescriptor 3, если он уже открыт

Пример манипулирования файловыми дескрипторами, среди многих, будет захватывать вывод команды dialog в переменную

0
ответ дан 22 May 2018 в 18:09

[n]>&word называется дублированием дескриптора выходного файла (см. раздел 2.7.6 стандарта языка оболочки POSIX). Это конкретное поведение является особенностью борнеподобных оболочек, включая ksh, dash и bash; на самом деле стандарт основан на оболочке Борна и ksh. Изучая руководства tcsh и csh, они, по-видимому, не предоставляют возможности дублирования дескриптора файла, однако из описания >& это ведет себя как &> в bash (то есть перенаправляет ошибки и нормальный вывод в файл) .

В системах типа * nix, включая Ubuntu, вы часто слышите, что все это файл, а точнее раздел 2.7.6 . Стандартный вывод - это постоянный файловый дескриптор 1, а стандартная ошибка - файловый дескриптор 2. Таким образом, > FILE 2>&1 технически означает дубликат дескриптора файла 2 на дескриптор файла 1. Другими словами, этот ответ:

2> & amp; ; 1 сообщает оболочке дать команде дескриптор файла 2, который является дубликатом дескриптора 1. (т. Е. Stderr & amp; stdout указывает на тот же fd).

Ключевым моментом здесь является указание, что дескриптор 1 должен быть установлен первым. Поскольку shell обрабатывает перенаправления в порядке слева направо, команда command >FILE 2&1 сообщает оболочке об обновлении stdout для command, чтобы сначала войти в FILE, и только тогда дескриптор 2 может стать копией 1, то есть 1 и 2 точки к тому же location - FILE.

Это, конечно, выходит за рамки стандартной ошибки и стандартного вывода. Как показано в в этом ответе , выполнив 3&>2

2> & amp; 1 сообщает оболочке дать команде дескриптор файла 2, который является дубликатом дескриптор 1. (т. е. stderr & amp; stdout указывает на тот же fd).

... вы дублируете (dup2) filedescritor 2 на filedescriptor 3, возможно, закрываете filedescriptor 3, если он уже открыт

Пример манипулирования файловыми дескрипторами, среди многих, будет захватывать вывод команды dialog в переменную

0
ответ дан 18 July 2018 в 06:16

> FILE 2>&1 и &> FILE эквивалентны. См. 8.2.3.2. Перенаправление ошибок в руководстве Bash для начинающих Глава 8

4
ответ дан 18 July 2018 в 06:16

[n]>&word называется дублированием дескриптора выходного файла (см. раздел 2.7.6 стандарта языка оболочки POSIX). Это конкретное поведение является особенностью борнеподобных оболочек, включая ksh, dash и bash; на самом деле стандарт основан на оболочке Борна и ksh. Изучая руководства tcsh и csh, они, по-видимому, не предоставляют возможности дублирования дескриптора файла, однако из описания >& это ведет себя как &> в bash (то есть перенаправляет ошибки и нормальный вывод в файл) .

В системах типа * nix, включая Ubuntu, вы часто слышите, что все это файл, а точнее раздел 2.7.6 . Стандартный вывод - это постоянный файловый дескриптор 1, а стандартная ошибка - файловый дескриптор 2. Таким образом, > FILE 2>&1 технически означает дубликат дескриптора файла 2 на дескриптор файла 1. Другими словами, этот ответ:

2> & amp; ; 1 сообщает оболочке дать команде дескриптор файла 2, который является дубликатом дескриптора 1. (т. Е. Stderr & amp; stdout указывает на тот же fd).

Ключевым моментом здесь является указание, что дескриптор 1 должен быть установлен первым. Поскольку shell обрабатывает перенаправления в порядке слева направо, команда command >FILE 2&1 сообщает оболочке об обновлении stdout для command, чтобы сначала войти в FILE, и только тогда дескриптор 2 может стать копией 1, то есть 1 и 2 точки к тому же location - FILE.

Это, конечно, выходит за рамки стандартной ошибки и стандартного вывода. Как показано в в этом ответе , выполнив 3&>2

2> & amp; 1 сообщает оболочке дать команде дескриптор файла 2, который является дубликатом дескриптор 1. (т. е. stderr & amp; stdout указывает на тот же fd).

... вы дублируете (dup2) filedescritor 2 на filedescriptor 3, возможно, закрываете filedescriptor 3, если он уже открыт

Пример манипулирования файловыми дескрипторами, среди многих, будет захватывать вывод команды dialog в переменную

0
ответ дан 24 July 2018 в 18:34

> FILE 2>&1 и &> FILE эквивалентны. См. 8.2.3.2. Перенаправление ошибок в руководстве Bash для начинающих Глава 8

4
ответ дан 24 July 2018 в 18:34
  • 1
    IIRC &> FILE относится только к Bash, тогда как >FILE 2>&1 понимается большим количеством оболочек. – Byte Commander 25 September 2017 в 02:08
  • 2
    @ByteCommander, ох, я даже не знал, что у bash была такая стенография ... Я всегда использовал 2 & gt; & amp; 1. – psusi 25 September 2017 в 03:24

Другие вопросы по тегам:

Похожие вопросы: