Как записать stderr в файл при использовании & ldquo; tee & rdquo; с трубкой?

Вы не можете использовать оператор || (или) в пределах hasClass. Попробуйте это:

if ($('#menu-item-49').hasClass('current-menu-item') || 
    $('#menu-item-49').hasClass('current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}

Или вы можете сделать это, если это слишком многословно:

var $menuItem = $('#menu-item-49');
if ($menuItem.hasClass('current-menu-item') || 
    $menuItem.hasClass('current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}

Или еще лучше:

var $menuItem = $('#menu-item-49');
if ($menuItem.is('.current-menu-item, .current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}
487
задан supervacuo 30 August 2018 в 12:25
поделиться

3 ответа

Я предполагаю, что Вы хотите все еще видеть STDERR и STDOUT на терминале. Вы могли пойти для ответа Josh Kelley, но я нахожу хранение a tail вокруг в фоновом режиме, который производит Ваш файл журнала очень hackish и cludgy. Заметьте, как Вы должны сохранить exra FD и сделать очистку позже путем уничтожения ее и технически должны делать это в a trap '...' EXIT.

Существует лучший способ сделать это, и Вы уже обнаружили его: tee.

Только, вместо того, чтобы просто использовать его для Вашего stdout, имейте мишень для stdout и один для stderr. Как Вы выполните это? Замена процесса и перенаправление файла:

command > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)

Давайте разделим его и объясним:

> >(..)

>(...) (замена процесса), создает FIFO и позволяет tee послушайте на нем. Затем это использует > (перенаправление файла) для перенаправления STDOUT command к FIFO, что Ваше первое tee слушает на.

То же самое для второго:

2> >(tee -a stderr.log >&2)

Мы используем замену процесса снова для создания a tee процесс, который читает из STDIN и выводит его в stderr.log. tee производит его вход назад на STDOUT, но так как его вход является нашим STDERR, мы хотим перенаправить teeSTDOUT к нашему STDERR снова. Затем мы используем перенаправление файла для перенаправления commandSTDERR к входу FIFO (teeSTDIN).

См. http://mywiki.wooledge.org/BashGuide/InputAndOutput

Замена процесса является одной из тех действительно прекрасных вещей, которые Вы получаете в качестве награды выбора bash как Ваша оболочка в противоположность sh (POSIX или Bourne).


В sh, необходимо было бы сделать вещи вручную:

out="${TMPDIR:-/tmp}/out.$$" err="${TMPDIR:-/tmp}/err.$$"
mkfifo "$out" "$err"
trap 'rm "$out" "$err"' EXIT
tee -a stdout.log < "$out" &
tee -a stderr.log < "$err" >&2 &
command >"$out" 2>"$err"
742
ответ дан 22 November 2019 в 22:35
поделиться

Для перенаправления stderr в файл отобразите stdout, чтобы экранировать, и также сохранить stdout в файл:

./aaa.sh 2>ccc.out | tee ./bbb.out

Править: Для отображения и stderr и stdout, чтобы экранировать и также сохранить обоих в файл можно использовать перенаправление ввода-вывода удара:

#!/bin/bash

# Create a new file descriptor 4, pointed at the file
# which will receive stderr.
exec 4<>ccc.out

# Also print the contents of this file to screen.
tail -f ccc.out &

# Run the command; tee stdout as normal, and send stderr
# to our file descriptor 4.
./aaa.sh 2>&4 | tee bbb.out

# Clean up: Close file descriptor 4 and kill tail -f.
exec 4>&-
kill %1
21
ответ дан 22 November 2019 в 22:35
поделиться

При использовании удара:

# Redirect standard out and standard error separately
% cmd >stdout-redirect 2>stderr-redirect

# Redirect standard error and out together
% cmd >stdout-redirect 2>&1

# Merge standard error with standard out and pipe
% cmd 2>&1 |cmd2

Кредит (не отвечающий от вершины моей головы) идет сюда: http://www.cygwin.com/ml/cygwin/2003-06/msg00772.html

13
ответ дан 22 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

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