Вы можете получить 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)"
less -R
Вы можете использовать программу просмотра с less
по
-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
).