Добавить exec screen -R
в конце ~/.profile
на устройстве: каждый раз, когда Вы входите в систему, Ваша сессия повторно прикрепит созданную в последний раз экранную сессию. Более точно, чтобы не запускаться screen
на неинтерактивных сессиях, где Вы хотите считать Ваш .profile
для установки переменных среды используйте это:
case $- in *i*) exec screen -R;; esac
Вы все еще сможете постараться не присоединять для экранирования на интерактивной сессии путем выполнения ssh -t bash -i
поскольку это пропустит Ваш .profile
.
Это происходит из-за использования [119559]> /dev/null 2>&1[119560] перенаправит весь вывод команды (как [119561]stdout[119562], так и [119563]stderr[119564]) на [119565]/dev/null[119566], что означает, что на терминал не выводятся никакие выводы. По умолчанию:
По умолчанию:
В скрипте используется [119567]> /dev/null[119568], что вызывает:
А затем [119569]2>&1[119570], что вызывает:
Я пытаюсь понять использование здесь "> /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 файл может привести к ошибкам любого типа.
Это может привести к ошибкам по ряду причин, в том числе:
Недостаточные права доступа к файлу(ам), который вы пытаетесь архивировать, или к файлу, который вы пытаетесь записать на
Недостаточное место на диске для создания архива
Этот код:
command > filename 2>&1
> filename
перенаправляет stdout
наfilename
2>&1
)перенаправляет stderr
наstdout
(сейчасfilename
)(файловый дескриптор 1 используется по умолчанию, поэтому >
является сокращением от1>
)
Другой распространенный пример:
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 страница. Вот некоторые из них, которые я нашел полезными:
Чтобы легко понять, что такое «перенаправление на /dev/null
», напишите это явно. Ниже приведен пример команды, которая пытается удалить -несуществующий файл (для имитации ошибки ).
rm nonexisting.txt 1> /dev/null 2> /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
Мое предложение. :Придерживайтесь первого варианта. Пишите команды явно, вместо использования указателей. Требует практически никаких дополнительных усилий, но гораздо легче понять и объяснить.
При запуске 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, по-прежнему записываются на консоль.
cat nonexistantfile.txt &>/dev/null
Это перенаправляет как STDOUT, так и STDIN
И эквивалентно
cat nonexistantfile.txt >/dev/null 2>&1