ImageMagick import
может автоматически сделать снимок экрана с корнем Xorg, а с -crop
только нужную часть будет использовано. xrandr
предоставляет параметр для обрезки
.
Чтобы минимизировать накладные расходы, вам следует создать команду import
один раз, а не запрашивать с использованием отображаемого имени каждый раз, когда вы делаете снимок экрана:
mapfile -t displays < <(xrandr | grep ' connected')
get_date='`date +"%Y%m%d-%H%M%S"`'
for (( i=0; i<${#displays[@]}; i++)); do
name=`echo ${displays[i]} | cut -d " " -f 1`
crop=`echo ${displays[i]} | cut -d " " -f 3`
echo import -silent -window root -crop ${crop} \"${name}-${get_date}.png\"
done
Пояснения к файлу карты и циклу for можно найти в ] этот вопрос .
Это даст вам следующие команды:
import -silent -window root -crop 1920x1080+0+0 "DFP5-`date +"%Y%m%d-%H%M%S"`.png"
import -silent -window root -crop 1920x1080+1920+0 "DFP7-`date +"%Y%m%d-%H%M%S"`.png"
, которые теперь вы можете использовать в цикле while для таймлапса (остановитесь, нажав ctrl + c
).
while [ 1 ]; do
import ...
sleep 1 # for 1 second delay between screenshots
done
Это единственный известный мне метод. Надеюсь, есть способы с меньшими накладными расходами.
В Bash вы можете объявить переменную в верхнем регистре с помощью -u
, и затем она автоматически преобразуется.
$ declare -u a
$ b=abcd
$ a=$b
$ echo $a
ABCD
Использование bash (4.0+) внутри скрипта:
newvarname=${3^^}
Использование tcsh:
set newvarname = $3:u:q
Использование zsh:
# tcsh-like syntax:
newvarname=${3:u} # or just $3:u
# native syntax:
newvarname=${(U)3}
Использование tr
вместо функций оболочки (хотя и ограничены однобайтовыми буквами только в некоторых реализациях tr
, таких как GNU):
newvarname=$(printf "%s" "$3" | tr '[:lower:]' '[:upper:]')
На этой странице обобщены многие функции различных оболочек UNIX, включая манипуляции с текстом: http://hyperpolyglot.org/unix-shells .