Автоматическое усечение длинного вывода в bash

var getDaysLeft = function (date1, date2) {
   var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2));
   var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24);   
   return daysLeft;
};
var date1='2018-05-18';
var date2='2018-05-25';
var dateDiff = getDaysLeft(date1, date2);
console.log(dateDiff);
0
задан Marcus Ritt 19 March 2019 в 21:32
поделиться

1 ответ

Можно сделать, используя PROMPT_COMMAND

MAXLINES=10
tmp_out=/tmp/$.output
PROMPT_COMMAND='touch "$tmp_out"; tail -n "$MAXLINES" "$tmp_out" >/dev/stdin; exec >"$tmp_out"'

Как это работает

  • tmp_out=/tmp/$.output временный файл, используемый для хранения результатов команды
  • [116 ]: создать пустой файл, если его не существует, чтобы команда tail не вызывала ошибки при первом вызове
  • tail -n "$MAXLINE" "$tmp" > /dev/stdin: показывать первые максимумы вывода
  • exec > "$tmp_out": очистить временный файл и перенаправляет вывод текущего процесса (дескриптор файла 1) в этот файл, в случае, если stderr также может быть перенаправлен в другой файл для усечения (например, 2> "$tmp_err").

Для запуска команды без перенаправления

exec >/dev/stdin; ... the command

или (пробел после { важен)

{ the command;}>/dev/stdin

Извлечение начальных настроек

unset PROMPT_COMMAND; exec >/dev/stdin
0
ответ дан Nahuel Fouilleul 19 March 2019 в 21:32
поделиться
Другие вопросы по тегам:

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