перенаправление к/dev/null

Добавить exec screen -R в конце ~/.profile на устройстве: каждый раз, когда Вы входите в систему, Ваша сессия повторно прикрепит созданную в последний раз экранную сессию. Более точно, чтобы не запускаться screen на неинтерактивных сессиях, где Вы хотите считать Ваш .profile для установки переменных среды используйте это:

case $- in *i*) exec screen -R;; esac

Вы все еще сможете постараться не присоединять для экранирования на интерактивной сессии путем выполнения ssh -t bash -i поскольку это пропустит Ваш .profile.

165
14.03.2014, 06:20
6 ответов
[119037]Нет, это не предотвратит скрипт от сбоя. Если в процессе [119557]tar[119558] возникнут ошибки (например: разрешение отказано, такого файла или директории нет, ...), скрипт все равно аварийно завершает работу.

  • Это происходит из-за использования [119559]> /dev/null 2>&1[119560] перенаправит весь вывод команды (как [119561]stdout[119562], так и [119563]stderr[119564]) на [119565]/dev/null[119566], что означает, что на терминал не выводятся никакие выводы. По умолчанию:

  • По умолчанию:

    В скрипте используется [119567]> /dev/null[119568], что вызывает:enter image description here

    А затем [119569]2>&1[119570], что вызывает:

    251
    27.01.2020, 19:28

    Я пытаюсь понять использование здесь "> /dev/null 2>&1".

    (обратите внимание, что я добавил переадресацию перед [119529]/dev/null[119530] в ваш вопрос)

    $header[ ] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    $header[ ] = "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    

    Вышеуказанное перенаправило бы [119531]STDOUT[119532] и [119533]STDERR[119534] на [119535]/dev/null[119536]. Он работает путем объединения [119537]STDERR[119538] в [119539]STDOUT[119540]. (По сути, весь вывод [119541]/выход [119542] из команды будет перенаправлен на нулевое устройство [119543].)

    ... не приводя к аварийному завершению скрипта (что-то вроде обработки исключений try catch в языках программирования).

    Accept: text/xml,application/xml,application/xhtml+xml,
        text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    

    Это не совсем похоже на [119547]try/catch[119548] или что-то в этом роде. Просто [119549]умалчивает[119550] любой вид вывода (включая ошибку) из команды.

    $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    

    Потому что я не понимаю, как использовать tar для сжатия каталога в tar файл может привести к ошибкам любого типа.

    Это может привести к ошибкам по ряду причин, в том числе:

    Недостаточные права доступа к файлу(ам), который вы пытаетесь архивировать, или к файлу, который вы пытаетесь записать на

    1. Недостаточное место на диске для создания архива

    23
    27.01.2020, 19:28

    Перенаправление ввода/вывода Bash

    redirection definition


    Этот код:

    command > filename 2>&1
    
    • > filenameперенаправляет stdoutнаfilename
    • (2>&1)перенаправляет stderrнаstdout(сейчасfilename)

    (файловый дескриптор 1 используется по умолчанию, поэтому >является сокращением от1>)

    Вот объяснение ABSG (Гл. 20).

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

    command >>/dev/null 2>&1
    

    перенаправляет stderrи stdoutна /dev/null... что значит наникуда. Вещи, отправленные на /dev/null, не сохраняются, не кэшируются и не запоминаются каким-либо образом.

    Они просто отправлены « в никуда » и забыты.Это способ запуска программ и обеспечения того, чтобы они не производили вывода и никогда не отображались в командной строке или в файле журнала.


    Я довольно часто встречаю вопросы такого типа... в основном потому, что мне пришлось искать их самому, так как я не программировал годами. Вот некоторая полезная информация от ABSG:

    "Redirection simply means capturing output from a file, command, program, or script and sending it as input to another file, command, program, or script."

    2>&1 
    # Redirects stderr to stdout.
    
    command >>filename 2>&1
    # Appends both stdout and stderr
    #+  to the file "filename"...
    

    ABSG :Расширенное руководство по написанию сценариев Bash:Ссылка Глава 20 выше — это ссылка на страницу перенаправления ввода-вывода в документе с открытым исходным кодом tldp.org под названием Advanced Bash Scripting Guide Менделя Купера. Он указан как «глубокое -исследование искусства написания сценариев оболочки. " и я абсолютно согласен. Это потрясающий ресурс, в котором есть масса ответов на всевозможные сумасшедшие ситуации.

    Другие ценные ресурсы:В текущем/поддерживаемом разделе(есть много ценных ресурсов в нескольких удобных форматах, таких как html, pdf, текст и т. д.)в Руководствах проекта документации по Linux страница. Вот некоторые из них, которые я нашел полезными:

    -2
    27.01.2020, 19:28

    Чтобы легко понять, что такое «перенаправление на /dev/null», напишите это явно. Ниже приведен пример команды, которая пытается удалить -несуществующий файл (для имитации ошибки ).

    rm nonexisting.txt 1> /dev/null 2> /dev/null
    
    1. для стандартного вывода. Отправляет информационные журналы в /dev/null
    2. для stderr. Отправляет журналы ошибок в /dev/null

    Ниже приведено несколько улучшений.

    Расширение 1 :Вы можете заменить 1>только на >. Это связано с тем, что 1является стандартным выводом по умолчанию, и вы можете игнорировать упоминание значений по умолчанию.

    rm nonexisting.txt > /dev/null 2> /dev/null
    

    Улучшение 2 :Вы можете заменить второе перенаправление файла(> /dev/null)дублированием дескриптора файла(>& 1). Это связано с тем, что /dev/null— это , на который уже указывает stdout1.

    rm nonexisting.txt 1> /dev/null 2>& 1
    

    Расширение 3 :Это настолько распространенная операция, что многие оболочки имеют сокращенную форму в виде одного &>оператора.

    rm nonexisting.txt &> /dev/null
    

    Мое предложение. :Придерживайтесь первого варианта. Пишите команды явно, вместо использования указателей. Требует практически никаких дополнительных усилий, но гораздо легче понять и объяснить.

    37
    27.01.2020, 19:28

    При запуске CMD > /dev/null 2>&1

    STDOUT перенаправляет на /dev/null, а затем STDERR перенаправляет на АДРЕС STDOUT, для которого установлено значение /dev/null, следовательно, и STDOUT, и STDERR указывают на /dev/null

    И наоборот, при запуске CMD 2>&1 >/dev/null

    STDERR перенаправляет на АДРЕС STDOUT (Файловый дескриптор 1 в этот момент или /proc/self/fd/1 ), а затем STDOUT перенаправляет на /dev/null, но STDERR продолжает перенаправлять на fd1! ! В результате нормальный вывод из STDOUT отбрасывается, но ошибки, поступающие из STDERR, по-прежнему записываются на консоль.

    21
    27.01.2020, 19:28
    cat nonexistantfile.txt &>/dev/null
    

    Это перенаправляет как STDOUT, так и STDIN
    И эквивалентно

    cat nonexistantfile.txt >/dev/null 2>&1
    
    2
    09.11.2020, 12:07

    Теги

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