В двойных кавычках, символах $"\`
останьтесь особенными. Можно путать их с одинарными кавычками: в одинарных кавычках все символы интерпретируются буквально, за исключением '
самостоятельно, который заканчивает строковый литерал.
$ cat /opt/jira/.subversion/config | grep -P "$[^#]"
zsh: bad math expression: operand expected at `^#'
$[…]
синтаксис устаревший для арифметических выражений, которые могут быть записаны $((…))
как в оболочках POSIX. ^#
не допустимое арифметическое выражение; оболочка ожидала операнд, такой как число или имя переменной.
[1] broken pipe cat /opt/jira/.subversion/config
Начиная со второй команды в конвейере, прерванном прежде, чем использовать весь вывод от cat
(это даже не начало читать), первая команда (cat
) полученный SIGPIPE.
$ cat /opt/jira/.subversion/config | grep -P "\$[^#]"
$ cat /opt/jira/.subversion/config | grep -P "\$#"
Обратная косая черта говорит оболочке интерпретировать следующий символ буквально, таким образом, grep
видел шаблон $[^#]
или $#
. Эти шаблоны означают “конец строки, сопровождаемой любым символом кроме #
” и “конец строки, сопровождаемой #
” соответственно. Ни один из этих шаблонов ничему не может соответствовать.
$ cat /opt/jira/.subversion/config | grep -P "$#"
$#
количество позиционных параметров ($1
, $2
, …, коллективно доступный как $@
), т.е. аргументы передали командную строку оболочки или аргументы функции если в функции. В интерактивной оболочке обычно нет никаких позиционных параметров, таким образом, grep
видел шаблон 0
.
Шаблон, который Вы ищете, ^[^#]
(^
соответствия в начале строки). Если Вы не означаете включать значение переменной оболочки или вывод команды в шаблоне, используйте одинарные кавычки (это не имеет значения здесь, но это имеет значение для некоторых шаблонов, особенно те, которые содержат обратную косую черту или a $
). Вам не нужно -P
поскольку этот шаблон записан таким же образом в основном regexps (плоскость grep
), расширенный regexps (grep -E
) и жемчуг regexps (grep -P
).
$
Я не думаю, что Вы сможете сделать это с screen
если вывод на самом деле не представляется в окне, которое, вероятно, побеждает точку использования экрана. Однако окно не должно быть на переднем плане.
Комплект ImageMagick содержит названную утилиту import
можно использовать для этого. Если import --help
дает Вы "управляете не найденный", устанавливает imagemagick пакет, это будет доступно в любом дистрибутиве Linux.
import
нуждается в названии окна. iftop
терминальный интерфейс, так чтобы удостовериться, что Вы используете правильное имя, необходимо будет установить заголовок терминала GUI, в котором это работает. Как Вы делаете, который зависит, на котором терминале GUI Вы используете. Например, я предпочитаю Терминал XFCE, который был бы:
Terminal -T Iftop -e iftop
Открывает новое терминальное выполнение iftop
с заголовком "Iftop". Снимок экрана этого может быть сделан:
import -window Iftop ss.jpg
Если Вы собираетесь сделать это каждые пять секунд, Вы, вероятно, хотите вместо этого открыть окно, запускающее скрипт, таким образом, можно снова использовать тот же терминал:
count=0;
while ((1)); do
iftop &
pid=$!
sleep 1 # make sure iftop is up
count=$(($count+1))
import -window Iftop iftop_sshot$count.jpg
kill $pid
sleep 5
done
Если бы сценарий является "iftopSShot.sh" затем, Вы запустили бы это Terminal -T Iftop -e iftopSShot.sh
- кроме Вы, вероятно, не используете Terminal
. Большинство терминалов GUI Linux связано с определенным DE's, хотя они - автономные приложения, которые могут использоваться независимо. Я полагаю, что название терминала по умолчанию на KDE Konsole
и это следует -T
и -e
конвенции; для GNOME это, вероятно, gnome-terminal
(это, возможно, изменилось), и это, кажется, использует -t
и нет -T
.
Остерегайтесь import
значением по умолчанию звонит в звонок, который станет раздражающим, но существует a -silent
опция.
Несколько идей:
Вы могли использовать этот сценарий от обвиненного названный: инструмент Screenshot для повторяющегося screenshotting.
#!/bin/bash
# Screenshot tool for TIMS.
#
# -------------------------
#
# By regj 2012.05
#
# -------------------------
#
# Check for config file create if needed with sane defaults then exit.
if [ ! -f $HOME/.scrotter ]; then
echo "Creating scrotter config file ${HOME}/.scrotter"
echo "scrotfldrbase=${HOME}/Desktop/scrots" > $HOME/.scrotter
echo "fontsize=14" >> $HOME/.scrotter
echo "fillcolor=white" >> $HOME/.scrotter
echo "whiteterm=yes" >> $HOME/.scrotter
echo "subw=130" >> $HOME/.scrotter
echo "subh=5" >> $HOME/.scrotter
echo "fontpath=/usr/share/fonts/dejavu/DejaVuSansMono.ttf" >> $HOME/.scrotter
if [ $? = 0 ] ; then
echo -e "Config file succesfully created. Adjust values if needed in ~/.scrotter.\nIf you use a black term background set whiteterm to no."
echo "Current values:"
cat $HOME/.scrotter
echo "Rerun scrotter with --server-id if initial run"
exit 0
else
echo "Something went wrong"
exit 1
fi
fi
# Source config file
source $HOME/.scrotter
# convert functions for white or black terminal
conv_black () {
convert -pointsize $fontsize \
-font $fontpath \
-fill $fillcolor \
-draw "text ${xyplace} \"$(date "+%Y.%m.%d %H:%M"|sed -e ' s/\"/\\\"/g' )\"" \
$scrotfldr/$srvid-$count.png $scrotfldr/$srvid-$count.png
}
conv_white () {
convert -pointsize $fontsize \
-font $fontpath \
-fill $fillcolor \
-stroke black \
-strokewidth 1 \
-draw "text ${xyplace} \"$(date "+%Y.%m.%d %H:%M"|sed -e ' s/\"/\\\"/g' )\"" \
$scrotfldr/$srvid-$count.png $scrotfldr/$srvid-$count.png
}
# Options
case $1 in
--server-id) echo "Setting srvid" ; echo $2 > /tmp/${USER}-scrot-srvid ; exit 0;;
--reset-count) echo "0" > /tmp/$USER-scrot-count ; exit 0;;
--clean-up) rm -f $scrotfldr/*.png ; rm -f /tmp/${USER}-scrot-* ; exit 0 ;;
--help) echo "Options are:
--server-id: Set servername used in test.
--reset-count: Reset counter for enumerating png's.
--clean-up: Delete png's in current serverfolder and reset counters and serverid.
--help: This info."
exit 0;;
# Uncomment below if you want to remove everything in your scrot folder with this script
#--clean-all) if [ -z $scrotfldrbase ]; then
# echo "Exiting .." ; exit 1
# fi
# echo "NB: $scrotfldrbase will be removed recursively!"
# rm -rI $scrotfldrbase/*
# rm -f /tmp/${USER}-scrot-*
# exit 0 ;;
esac
# Check if serverid is defined, use if yes
if [ -s /tmp/${USER}-scrot-srvid ]; then
srvid=$(cat /tmp/${USER}-scrot-srvid)
scrotfldr=$HOME/Desktop/scrots/$srvid
else
echo "Please set server id with --server-id option. # scrotter --server-id <servername>"
exit 1
fi
# Check if root, exit if yes.
if [ $(id -u) = 0 ]; then
echo "Do not run as root!"
exit 1
fi
# Create count file
if [ ! -f /tmp/${USER}-scrot-count ]; then
echo "0" > /tmp/$USER-scrot-count
fi
# Create Screenshot folder if not present
if [ ! -d $scrotfldr ]; then
mkdir -p $scrotfldr
fi
# Get active window ID
activewin=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep "window id" )
activewinid=${activewin:40}
# Get geometry of window
geowinw=$(xwininfo -id ${activewinid} | awk '/Width/ {print $2}')
geowinh=$(xwininfo -id ${activewinid} | awk '/Height/ {print $2}')
# Define X,Y placment of date text
xyplace="$(($geowinw - $subw)),$(($geowinh - $subh))"
# Get current count
count=$(cat /tmp/${USER}-scrot-count)
# Take screenshot
import -window "$activewinid" $scrotfldr/$srvid-$count.png
# Insert date stamp into screenshot use xyplace variable to adjust placement
if [ $whiteterm = yes ] ; then
conv_white
else
conv_black
fi
# Increment counter
echo $(($count+1)) > /tmp/$USER-scrot-count
Поместите вышеупомянутое в названный файл scrotter
и сделайте это исполняемым файлом. Когда Вы выполняете его в первый раз:
$ ./scotter
Creating scrotter config file /home/saml/.scrotter
Config file succesfully created. Adjust values if needed in ~/.scrotter.
If you use a black term background set whiteterm to no.
Current values:
scrotfldrbase=/home/saml/Desktop/scrots
fontsize=14
fillcolor=white
whiteterm=yes
subw=130
subh=5
fontpath=/usr/share/fonts/dejavu/DejaVuSansMono.ttf
Rerun scrotter with --server-id if initial run
При выполнении его в 2-й раз Вы получите использование:
$ ./scrotter
Please set server id with --server-id option. # scrotter --server-id <servername>
Теперь выполните его с a --server-id blah
, и начните делать снимки экрана:
$ ./scrotter --server-id blah
$ ./scrotter
Это сделает снимки экрана активного окна. Это было бы изменено в структуру цикличного выполнения или изменено непосредственно!
Вы могли использовать команду импорта, чтобы сделать снимок экрана и перенести это в любой тип цикла, который Вы любите (за, whilte, и т.д.) в зависимости от Ваших потребностей. Этот aritcle, Снимки экрана Таймлапса, имеет все, в чем Вы нуждаетесь, я не думаю, что Вы хотите сделать сценарий выполненным из крона, но все остальное кажется применимым.
Например:
# takes screenshot
$ import -window root -display :0 -crop 958x490+20+128 "savedfiles/screenshot_$(date +%d%m%y-%H.%M).png"
# makes a video out of a bunch of them
$ mencoder "mf://screamshots/*.png" -mf fps=10 -o test.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800
В среде X :
Динамически установить название терминала:
Из нашего скрипта способ изменить заголовок терминала с помощью последовательностей ansi:
echo -e "\033]0;Term | myApp\007";
Захват png по заголовку окна:
Теперь мы можем искать id окна по точному заголовку с помощью wmctrl
и передавать id утилите import
:
import -window $(wmctrl -l | grep -i 'Term | myApp' | awk '{print $1}') ~/Pictures/capture.png
Создать gif:
Пример настройки: делайте 5 снимков каждую секунду, а затем преобразуйте их в gif с помощью convert
в бесконечном двухсекундном цикле.
rm -f /tmp/*png && for i in {1..5}; do import -window $(wmctrl -l | grep -i 'Term | myApp' | awk '{print $1}') /tmp/$i.png && sleep 1; done && convert -delay 200 -loop 0 /tmp/*.png animation.gif