Трубка B к D? - A && B || C | D

Вы можете использовать команду slabtop для просмотра того, какие объекты slab используются ядром.
Также вы можете проверить вывод / proc / meminfo

Найдите эти две строки в выводе

Slab:              68136 kB
SReclaimable:      21208 kB 

В приведенном выше примере показано, что ядро ​​использует 68 МБ блочного кэша и 21 МБ можно освободить. Для восстановления вы можете использовать технику, описанную здесь https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  

14
17.04.2017, 15:54
3 ответа

Да, в bash вы можете использовать круглые скобки:

(A && B || C) | D

Таким образом, вывод A && B || C будет передан в D.

31
27.01.2020, 19:50

Вы можете написать это как

if A; then B; else C; fi | D

Вы говорите, что хотите запустить либо B, либо C, но A && B || C этого не дает. Если A выполнится, но B выполнится и не выполнится, то будет выполнено C.

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

{ A && B || C; } | D

вместо ( ... ), поскольку последняя без необходимости заставляет создавать новую под-оболочку, которая может быть оптимизирована, а может и нет.

Примечание 2: обе формы предполагают, что A не производит никакого вывода, что верно в вашем примере, но не обязательно так в общем случае. Этого можно избежать

A; if [ "$?" -eq 0 ]; then B; else C; fi | D
15
27.01.2020, 19:50

Ответ акцептора правильный, но он не охватывает потенциальный случай использования, чтобы не иметь выход A в качестве входа D. Для этого вам понадобится перенаправление потока на A в зависимости от ваших потребностей.

  • Если вы хотите отбросить вывод A в любом случае:

    { A >/dev/null && B || C; } | D
    
  • Если вы хотите увидеть вывод A на терминале:

    { A >/dev/tty && B || C; } | D
    
  • Если вам нужен вывод A как вход последующей команды E, вам понадобится дополнительная группа команд и перенаправление потока:

    { { A >&3 && B || C; } | D; } 3>&1 | E
    

Если все это кажется вам слишком заумным (как и мне), я рекомендую использовать специальную переменную shell для статуса выхода A и работать с ней:

A
if [ $? -eq 0 ]; then
  B
else
  C
fi |
D

Если вы хотите быть более кратким, но не слишком заумным, я предлагаю следующее:

A; { [ $? -eq 0 ] && B || C; } | D

(См. также последнюю часть ответа hvd, которую я не заметил, когда писал свой первоначальный ответ)

.
6
27.01.2020, 19:50

Теги

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