С этой страницы perldoc ,
Чтобы захватить STDERR и STDOUT команды вместе:
$output = `cmd 2>&1`;
Чтобы захватить STDOUT команды, но сбросить ее STDERR:
$output = `cmd 2>/dev/null`;
Чтобы захватить STDERR команды, но сбросить ее STDOUT (упорядочение здесь важно):
$output = `cmd 2>&1 1>/dev/null`;
Для обмена STDOUT и STDERR команды, чтобы захватить STDERR, но оставить STDOUT для выхода из старого STDERR:
$output = `cmd 3>&1 1>&2 2>&3 3>&-`;
Я делаюне понимаю, как работают 3 и 4, и я не очень уверен, что я понимаю, что 1 и 2 правильно.Ниже то, что я понимаю.Пожалуйста, поправьте меня, где я не прав.
Я знаю, что 0
, 1
и 2
символизируют STDIN
, STDOUT
и STDERR
.
перенаправить 2 на 1, так что теперь они оба используют один и тот же поток (&
экранировал 1
, убедившись, что STDERR
не перенаправляется в файл с именем 1
вместо этого)
перенаправить 2 (STDERR) в нулевой поток, чтобы он отбрасывался
Я не понимаю этого.Разве это не должно быть просто
$output = `cmd 1>/dev/null`;
Кроме того, если целью является получение STDERR
сообщений на STDOUT
, не будет ли 1>/dev/null
перенаправлять все на /dev/null
?
Что здесь происходит?Что такое стрим 3
?Это как временная переменная?