может ли gparted (безопасно )увеличить размер раздела до пространства перед корневым разделом?

Мониторинг диалога программы и отправка оповещения

Вы можете отслеживать активность

  1. afifoили
  2. файл журналаxterm, теперь с интерактивным режимом

и запускатьzenityинформационное сообщение при вводе данных из контролируемой программы. Если вы хотите, вы также можете установитьespeakи позволить ему отправлять звуковое сообщение .

1. Запустите информационное сообщение zenityпри вводе данных из контролируемой программы с использованием FIFO.

Следующий сценарий оболочки может отслеживать диалог вывода из программы и отправлять предупреждение.

  • предполагается графическая среда рабочего стола
  • запустить сценарий оболочки в окне терминала, который используется как «консоль» дляwrapper
  • запуск отслеживаемой программы в окне xterm
  • запуск диалога в окне xterm(, где вы вводите ввод)
  • использование FIFO для доступа к выходным данным программы, которую нужно отслеживать, /dev/stdoutи dev/stderr.
  • запуск цикла while
    • проверка того, был ли изменен FIFO, и в этом случае
      • запуск окна zenityинформационного сообщения.

Ожидается, что вы закроете окно zenity, (можете работать с 'Enter' ), чтобы вернуться в окно xterm, где вы вводите свой ввод.

#!/bin/bash

if [ $# -eq 0 ]
then
 echo "'$0' is a wrapper, that sends a notification, when the wrapped program
has written to standard input and standard error and may be waiting for input.
---
Usage:   $0  [parameters]
Example: $0.program"
 exit
fi

message="'${1##*/} $2...' has written something, maybe asks for input"

tmpdir=$(mktemp -d)
tmpfifo=$(mktemp --tmpdir=$tmpdir)
rm "$tmpfifo"
mkfifo "$tmpfifo"
#ls -l "$tmpdir"
cnt1=$(stat --printf "%Y" "$tmpfifo")
sleep 1

xterm -title "${1##*/} $2..." -fa default -fs 11 -bg '#403600' \
 -e bash -c "$* 2>&1 | tee /dev/stderr 2>&1 > $tmpfifo" 2> /dev/null & pid=$!

#< "$tmpfifo" espeak &
< "$tmpfifo" cat &

cont=true
while $cont
do
 tmpstr=$(ps -Af |sed "s/grep $pid//"|grep "$pid")
# echo "$tmpstr"
 if [ "$tmpstr" != "" ]
 then
  cnt0=$cnt1
  cnt1=$(stat --printf "%Y" "$tmpfifo")
  if [ "$cnt1" != "$cnt0" ]
  then
#   zenity --notification --text="$message" 2> /dev/null
#   espeak "$message" &
   zenity --info --title="${0##*/} ${1##*/} $2..." \
    --text="$message" --width=500  2> /dev/null
  fi
  sleep 1
  else
  sleep.2
  # echo "process $pid has finished"
  cont=false
 fi
done

# clean up

rm -r "$tmpdir"

Вы также можете запустить espeakрядом с zenity, чтобы получить звуковое сообщение. В этом случае вы можете удалить символ #в начале этой строки. (В программе может быть много текста, поэтому обычно не рекомендуется перенаправлять fifo на espeak. Лучше перенаправить файл fifo на catи распечатать его в «консоли».)

Демо

Вы можете протестировать некоторые командные строки с помощью cp -iи mv -iи вы можете протестировать с помощью следующего небольшого сценария оболочки program,

#!/bin/bash

while true
do
 read -p "Waiting for input. 'Stop' to Quit " string
 if [ "${string:0:4}" == "Stop" ]
 then
  printf "$string. Gotcha\n"
  break
 elif [ "$string" != "" ]
 then
  printf "$string\n"
  printf "Working for 10 seconds...\n"
  sleep 10
 else 
  sleep 3
 fi
done

Текст справки:

$./wrapper
'./wrapper' is a wrapper, that sends a notification, when the wrapped program
has written to standard input and standard error and may be waiting for input.
---
Usage:  ./wrapper  [parameters]
Example:./wrapper.program

Мониторингprogram:

$./wrapper./program

zenityокно информационного сообщения:

enter image description here

Диалог в окне xterm:

Waiting for input. 'Stop' to Quit Hello
Hello
Working for 10 seconds...
Waiting for input. 'Stop' to Quit World
World
Working for 10 seconds...
Waiting for input. 'Stop' to Quit Goodbye
Goodbye
Working for 10 seconds...
Waiting for input. 'Stop' to Quit Stop

Вывод «Консоли» в исходном окне терминала после завершения:

$./wrapper./program
Waiting for input. 'Stop' to Quit Hello
Working for 10 seconds...
Waiting for input. 'Stop' to Quit World
Working for 10 seconds...
Waiting for input. 'Stop' to Quit Goodbye
Working for 10 seconds...
Waiting for input. 'Stop' to Quit Stop. Gotcha

Мониторингcp -ip:

$ LANG=C /path/wrapper cp -ip ubuntustudio-18.04-dvd-amd64.iso ubuntu-18.04.1-desktop-amd64.iso /tmp

zenityокно информационного сообщения:

enter image description here

Диалог вxterm:

cp: overwrite '/tmp/ubuntustudio-18.04-dvd-amd64.iso'? y
cp: overwrite '/tmp/ubuntu-18.04.1-desktop-amd64.iso'? n

Мониторингsudo parted /dev/sdc:

$ LANG=C./wrapper sudo parted /dev/sdc

Диалог вxterm:

[sudo] password for sudodus: 
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: SanDisk Extreme (scsi)
Disk /dev/sdc: 16,0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
 3      2097kB  258MB   256MB   primary   fat32        boot
 4      258MB   1366MB  1108MB  primary
 2      1366MB  12,4GB  11,0GB  extended               lba
 5      1367MB  6736MB  5369MB  logical   ext2
 6      6737MB  12,4GB  5615MB  logical   ext4
 1      12,4GB  16,0GB  3662MB  primary   ntfs

(parted) q

2. Запускать zenityинформационное сообщение, когда что-то записывается в xtermокно (из контролируемой программы или от пользователя ).

Следующий сценарий оболочки может отслеживать диалог с программой и отправлять предупреждения.

  • предполагается графическая среда рабочего стола
  • запустить сценарий оболочки в окне терминала, который используется как «консоль» дляwrapper
  • запуск отслеживаемой программы в окне xterm
  • запуск диалога в окне xterm(, где вы вводите данные)
  • использование файла журнала xtermдля доступа к выходным данным и входным данным отслеживаемой программы
  • запуск цикла while
    • проверка того, был ли изменен файл журнала, и в этом случае
      • запуск окна информационного сообщения zenity.
      • допускаются короткие задержки при наборе ввода (8 секунд; вы можете отредактировать файл сценария, чтобы изменить время задержки ).

Ожидается, что вы закроете окно zenity, (можете работать с 'Enter' ), чтобы вернуться в окно xterm, где вы вводите свой ввод.

Теперь есть интерактивный режим, в котором вы используете окно xtermточно так же, как и любое окно терминала.Закройте окно xterm, чтобы остановить мониторинг.

#!/bin/bash

# date        editor   comment
# 2018-12-31  sudodus  version 1.0

version=1.0

name="${0##*/}"
if [ "$1" == "-h" ] || [ "$1" == "--help" ]
then
 echo "'$name' is a wrapper, that sends a notification, when the wrapped program
has written to standard input and standard error and may be waiting for input.
---
Usage:    $name [program name] [parameters]
Examples: $name          # to run program(s) interactively in an xterm window
          $name program
          $name -h       # to get help (this text)
          $name -v       # show version"
 exit
elif [ "$1" == "-v" ]
then
 echo "$name version $version"
 exit
fi
tstart=$(date '+%s')
echo "----- start $name at $(date '+%F %T') ----------------------------"
tmpstr="${1##*/}"
xtermlog=$(mktemp -u)

if [ $# -eq 0 ]
then
 mess_zenity="Check, if the monitored program asks for input"
 mess_espeak="${mess_zenity/program/, Program,}"
 xterm -title "monitored by ${0##*/}" -fa default -fs 11 -bg '#2c2b2a' \
 -l -lf "$xtermlog" -sb -rightbar 2> /dev/null & pid=$!
else
 mess_espeak="Check if '${tmpstr^} ${2##*/} ${3##*/}...' asks for input"
 mess_zenity="Check if '$tmpstr $2 $3...' asks for input"
 xterm -title "${1##*/} $2 $3..." -fa default -fs 11 -bg '#2c2b2a' \
 -l -lf "$xtermlog" -e "$@" 2> /dev/null & pid=$!
fi
sleep 0.5
sync
cnt1=$(stat --printf "%Y" "$xtermlog")
tail -f "$xtermlog" & ptail=$!

cont=true
while $cont
do
 sleep 1
 cnt0=$cnt1
 tmpstr=$(ps -Af |sed "s/grep $pid//"|grep "$pid")
# echo "$tmpstr"
 if [ "$tmpstr" != "" ]
 then
  cnt1=$(stat --printf "%Y" "$xtermlog")
  if [ $cnt1 -gt $((cnt0 + 8)) ]
  then
#   zenity --notification --text="$message" 2> /dev/null
   espeak "$mess_espeak" &
   zenity --info --title="${0##*/} ${1##*/} $2..." \
    --text="$mess_zenity" --width=500  2> /dev/null
   touch "$xtermlog"
   cnt1=$(stat --printf "%Y" "$xtermlog")
  fi
  sleep 1
  else
  sleep.2
  # echo "process $pid has finished"
  cont=false
 fi
done

# clean up
tmpstr="$(tail -n1 "$xtermlog" | sed 's/.*exit.*/exit/')"
if [ "$tmpstr" != "exit" ]
then
 echo ""
fi
rm -r "$xtermlog"
kill $ptail
tend=$(date '+%s')
tuse=$((tend-tstart))
echo "------- end $name at $(date '+%F %T') --- used $tuse seconds"

Сохраните этот bashкод в файл и дайте ему [например] имя vialog, сделайте его исполняемым и, возможно, переместите его в каталог по вашему пути.

$ vialog
----- start vialog at 2018-12-31 14:37:41 ----------------------------

Вы работаете в окне xterm, и диалог также отображается в стартовом окне.

enter image description here

sudodus@bionic64 /media/multimed-2/test/test0/pomsky-wrap $./program
Waiting for input. 'Stop' to Quit Hello World
Hello World
Working for 10 seconds...
Waiting for input. 'Stop' to Quit I am writing...
I am writing...
Working for 10 seconds...
Waiting for input. 'Stop' to Quit Stop
Stop. Gotcha
sudodus@bionic64 /media/multimed-2/test/test0/pomsky-wrap $ scrot -sb
sudodus@bionic64 /media/multimed-2/test/test0/pomsky-wrap $ exit
exit
------- end vialog at 2018-12-31 14:39:02 --- used 81 seconds

enter image description here

0
19.02.2021, 12:41
0 ответов

Теги

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