Фильтрация вывода сценария во время выполнения

Вы можете получить PID родительского процесса с помощью этого:

PID=1234
ps -o ppid --no-headers -p "$PID"

или с

awk '/^PPid:/ { print $2 }' /proc/$PID/status

Вы получаете его в переменной с помощью

PPID="$(awk '/^PPid:/ { print $2 }' /proc/$PID/status)"
0
11.10.2019, 12:47
1 ответ

less -R

Вы можете использовать программу просмотра с lessпо

.
  • см. цвета ANSI с опцией-R
  • поиск patternвперед с помощью/pattern
  • поиск patternназад с помощью?pattern

  • Навигация с помощью клавиш со стрелками и PgUp , PgDn , Home , End .


  • Обратите внимание, что ваш буфер обновляется, когда вы нажимаете клавишу Конец :-)
  • Проблема цветового кода решена.
  • Ввод не исчезает.

Для написания используйте следующий сценарий:

#!/bin/bash

for i in {0..1000} ; do
    echo -e "\033[0;31mHello world\033[0m $i"
    sleep 1
done >> output.txt 2>&1 &

for j in {0..1000} ; do
    echo -e "\033[0;34mHello world\033[0m $j"
    sleep 1
done >> output.txt 2>&1 &

Используйте эту командную строку для чтения/проверки,

less -R output.txt

Сценарий оболочки с fifo, tailиgrep

Альтернативой простой команде lessявляется следующий небольшой сценарий оболочки. Предполагается, что вы можете достаточно прокрутить окно терминала, чтобы увидеть также старый вывод. Можно увеличить буфер, если он недостаточно велик. У меня есть следующие строки в моем `.bashrc', и я думаю, что они делают то, что вы хотите для этой цели,

HISTFILESIZE=1000000
HISTSIZE=10000

Сценарий оболочки для фильтрации и проверки,

#!/bin/bash

# this function is called when Ctrl-C is sent ##########################

inversvid="\0033[7m"
resetvid="\0033[0m"

function trap_ctrlc ()
{
    # perform cleanup here

    echo " Press <Enter> to continue with another query or"
    echo -en "$inversvid"
    read -s -n1 -t5 -p " <x> to exit " ans
    echo -en "$resetvid"
    if [ "$ans" == "x" ]
    then
     # exit shell script
     # if omitted, shell script will continue execution
     echo ""
     exit
    else
     echo ""
    fi
}

##### main #############################################################

# initialise trap to call trap_ctrlc function
# when signal 2 (SIGINT) is received

trap "trap_ctrlc" 2

echo "Scroll the terminal window (maybe inscrease the buffer to store enough lines)

Interrupt viewing the filtered output with <ctrl c>"

if [ "$1" == "" ]
then
   read -p "Search: " query
else
   query="$@"
fi

# create fifo

mkfifo fifo

# run a loop for queries and filtered output

while true ; do
 if [ "$query" == "" ]
 then
    read -p "New search: " query
 fi

# mkfifo fifo
 clear
 tail -n 10000 -f output.txt > fifo &
 grep --color -E "$query" fifo
 sleep 0.1
 query=""
done

Обратите внимание, что этот сценарий оболочки также будет видеть escape-последовательности ANSI, поэтому, например, если вы хотите отфильтровать 0,вы увидите все строки (, потому что в последовательности сброса )есть ноль. Вы можете использовать расширенные регулярные выражения (параметр -Eиз grep, который позволяет указать, что вы хотите искать, например \.?0или 0$.

(Это не проблема сless -R).

0
28.01.2020, 03:11

Теги

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