Часть вашего [1]+ Done ... вашего вывода, похоже, исходит из управления работой Bash. Вы обычно получаете его, когда команда, которую вы начали в фоновом режиме, завершается следующим образом:
$ sleep 1 &
[1] 20931
$
[1]+ Done sleep 1
Одним из решений для подавления этих выходов управления работой является запуск фоновой команды в подселлем, заключая его в круглые скобки:
$ ( sleep 1 &)
$
Я не могу сказать, подходит ли это в вашей ситуации, потому что вы еще не показывали свои фактические команды, и этот подход имеет несколько недостатков :
Задание больше не может управляться (например, команды jobs, bg, fg), но по мере запуска из сценария запуска я предполагаю, что это не будет предназначено так или иначе. Если команда изменяла свою среду (например, устанавливала переменные или меняла рабочий каталог), это повлияло бы только на подоболочку, а не на остальную часть скрипта.
Другой способ - заставить оболочку забыть о задании после того, как он начал использовать disown, например:
$ sleep 1 & disown
[1] 27248
$
Таким образом, это также не прекратится, когда оболочка выйдет, поэтому она может продолжать работать после выхода пользователя из системы, если я понял это правильно (исправьте меня, если нет).
Источники и дальнейшее чтение :
Выполнение команд bash в фоновом режиме без задания печати и идентификаторов процесса. Есть ли способ сделать настройку управления настройкой bash спокойной? Как / dev / null фоновые процессы «информационный» вывод? Как подавить код завершения готовых фоновых заданийЯ собрал небольшой скрипт для круговых скриншотов, вам понадобятся следующие пакеты (хотя он также адаптируется для других программ-скриншотов и эмуляторов терминала):
sudo apt install xdotool gnome-screenshot imagemagick xterm
Сохраните его, например, ~/circular_screenshot.bash и сделать его исполняемым с помощью chmod +x ~/circular_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши в центральное положение и нажать «Ввод», а затем переместить его в крайнее положение (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите Войти. Экран затем мерцает, пока снимок сделан (я рекомендую использовать scrot $temp_screenshot вместо этого, он не показывает это странное поведение.) И ImageMagick convert 1 используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав переменную output скрипта.
[!d7 ]
Я полагаю, вы не хотите, чтобы каждый раз, когда вы делаете скриншот, блокируете свой экран, так что вот решение для этого; Вызовите скрипт следующим образом (предполагая, что скрипт был сохранен как ~/circular_screenshot.bash):
xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash
Выполняет сценарий в невидимом окне терминала (значок с красным «X» и синим «T», ), вам просто нужно убедиться, что он сфокусирован, когда вы набираете Enter . Вы можете назначить эту команду ярлыку на клавиатуре с помощью настроек среды рабочего стола.
Поскольку ImageMagick невероятно мощный, вы можете адаптировать этот скрипт для вывода других фигур, я использовал ellipse с одинаковым радиусом в обоих x и y для рисования круга выше - измените это на, например, $radius,$(bc <<<"$radius*0.5"), чтобы получить вместо этого эллипс с эксцентриситетом выше 0.
1
Я собрал небольшой скрипт для круговых скриншотов, вам понадобятся следующие пакеты (хотя он также адаптируется для других программ-скриншотов и эмуляторов терминала):
sudo apt install xdotool gnome-screenshot imagemagick xterm
#!/bin/bash
output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png
read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x_center=$X
y_center=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
gnome-screenshot -f $temp_screenshot
radius=$(bc <<<"sqrt(($X-$x_center)^2+($Y-$y_center)^2)")
convert $temp_screenshot -alpha on \( +clone -channel a -evaluate multiply 0 -draw "ellipse $x_center,$y_center $radius,$radius 0,360" \) -compose DstIn -composite -trim "$output"
Сохраните его, например, ~/circular_screenshot.bash и сделать его исполняемым с помощью chmod +x ~/circular_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши в центральное положение и нажать «Ввод», а затем переместить его в крайнее положение (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите Войти. Экран затем мерцает, пока снимок сделан (я рекомендую использовать scrot $temp_screenshot вместо этого, он не показывает это странное поведение.) И ImageMagick convert 1 используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав переменную output скрипта.
Я полагаю, вы не хотите, чтобы каждый раз, когда вы делаете скриншот, блокируете свой экран, так что вот решение для этого; Вызовите скрипт следующим образом (предполагая, что скрипт был сохранен как ~/circular_screenshot.bash):
xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash
Выполняет сценарий в невидимом окне терминала (значок с красным «X» и синим «T», ), вам просто нужно убедиться, что он сфокусирован, когда вы набираете Enter . Вы можете назначить эту команду ярлыку на клавиатуре с помощью настроек среды рабочего стола.
Поскольку ImageMagick невероятно мощный, вы можете адаптировать этот скрипт для вывода других фигур, я использовал ellipse с одинаковым радиусом в обоих x и y для рисования круга выше - измените это на, например, $radius,$(bc <<<"$radius*0.5"), чтобы получить вместо этого эллипс с эксцентриситетом выше 0.
1
Я собрал небольшой скрипт для круговых скриншотов, вам понадобятся следующие пакеты (хотя он также адаптируется для других программ-скриншотов и эмуляторов терминала):
sudo apt install xdotool gnome-screenshot imagemagick xterm
#!/bin/bash
output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png
read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x_center=$X
y_center=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
gnome-screenshot -f $temp_screenshot
radius=$(bc <<<"sqrt(($X-$x_center)^2+($Y-$y_center)^2)")
convert $temp_screenshot -alpha on \( +clone -channel a -evaluate multiply 0 -draw "ellipse $x_center,$y_center $radius,$radius 0,360" \) -compose DstIn -composite -trim "$output"
Сохраните его, например, ~/circular_screenshot.bash и сделать его исполняемым с помощью chmod +x ~/circular_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши в центральное положение и нажать «Ввод», а затем переместить его в крайнее положение (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите Войти. Экран затем мерцает, пока снимок сделан (я рекомендую использовать scrot $temp_screenshot вместо этого, он не показывает это странное поведение.) И ImageMagick convert 1 используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав переменную output скрипта.
Я полагаю, вы не хотите, чтобы каждый раз, когда вы делаете скриншот, блокируете свой экран, так что вот решение для этого; Вызовите скрипт следующим образом (предполагая, что скрипт был сохранен как ~/circular_screenshot.bash):
xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash
Выполняет сценарий в невидимом окне терминала (значок с красным «X» и синим «T», ), вам просто нужно убедиться, что он сфокусирован, когда вы набираете Enter . Вы можете назначить эту команду ярлыку на клавиатуре с помощью настроек среды рабочего стола.
Поскольку ImageMagick невероятно мощный, вы можете адаптировать этот скрипт для вывода других фигур, я использовал ellipse с одинаковым радиусом в обоих x и y для рисования круга выше - измените это на, например, $radius,$(bc <<<"$radius*0.5"), чтобы получить вместо этого эллипс с эксцентриситетом выше 0.
1
Используя ту же идею принятого ответа, я создал эту гексагональную форму для личного использования и решил поделиться сценарием здесь, если это полезно для кого-то другого.
Пример вывода
3]#!/bin/bash
output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png
read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x1=$X
y1=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
x2=$X
y2=$Y
gnome-screenshot -f $temp_screenshot
radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)")
ca=$(bc -l <<<"$radius/sqrt(3)")
h=$(bc -l <<<"$radius/(sqrt(3)/2)")
P1_x=$(bc <<<"$x1+$ca")
P1_y=$(bc <<<"$y1+$radius")
P2_x=$(bc <<<"$x1+$h")
P2_y=$(bc <<<"$y1")
P3_x=$(bc <<<"$x1+$ca")
P3_y=$(bc <<<"$y1-$radius")
P4_x=$(bc <<<"$x1-$ca")
P4_y=$(bc <<<"$y1-$radius")
P5_x=$(bc <<<"$x1-$h")
P5_y=$(bc <<<"$y1")
P6_x=$(bc <<<"$x1-$ca")
P6_y=$(bc <<<"$y1+$radius")
convert $temp_screenshot -alpha on \
\( +clone -channel a -evaluate multiply 0 -draw \
"polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \
-compose DstIn -composite -trim "$output"
Процесс в точности совпадает с принятым ответом. В этом случае я просто изменил имя скрипта:
«Сохраните его, например, ~/hexagonal_screenshot.bash, и сделайте его исполняемым с помощью chmod +x ~/hexagonal_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить указатель мыши на в центральном положении и нажмите «Ввод», а затем переместите его в положение края (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите «Ввод». Затем экран мерцает во время снятия снимка (я рекомендую использовать [ f4], это не показывает это нечетное поведение.) и ImageMagick convert используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав [ f6].
Пример вывода
Если кто-то интересуется математикой, то здесь как я это сделал. Для создания многоугольника с различным количеством ребер или разных фигур с помощью Imagemagick процедура будет одинаковой: выполните математику и добавьте или удалите точки в эту часть кода "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y".
4]
Используя ту же идею принятого ответа, я создал другой скрипт для создания шестиугольных скриншотов, и я делюсь им здесь, если это полезно для кого-то другого.
#!/bin/bash
output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png
read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x1=$X
y1=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
x2=$X
y2=$Y
gnome-screenshot -f $temp_screenshot
radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)")
ca=$(bc -l <<<"$radius/sqrt(3)")
h=$(bc -l <<<"$radius/(sqrt(3)/2)")
P1_x=$(bc <<<"$x1+$ca")
P1_y=$(bc <<<"$y1+$radius")
P2_x=$(bc <<<"$x1+$h")
P2_y=$(bc <<<"$y1")
P3_x=$(bc <<<"$x1+$ca")
P3_y=$(bc <<<"$y1-$radius")
P4_x=$(bc <<<"$x1-$ca")
P4_y=$(bc <<<"$y1-$radius")
P5_x=$(bc <<<"$x1-$h")
P5_y=$(bc <<<"$y1")
P6_x=$(bc <<<"$x1-$ca")
P6_y=$(bc <<<"$y1+$radius")
convert $temp_screenshot -alpha on \
\( +clone -channel a -evaluate multiply 0 -draw \
"polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \
-compose DstIn -composite -trim "$output"
Процесс в точности совпадает с принятым ответом. В этом случае я просто изменил имя сценария:
«Сохраните его, например, ~/hexagonal_screenshot.bash, и сделайте его исполняемым с помощью chmod +x ~/hexagonal_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши на в центральном положении и нажмите «Ввод», а затем переместите его в положение края (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите «Ввод». Затем экран мерцает во время снятия снимка (я рекомендую использовать scrot $temp_screenshot, это не показывает это нечетное поведение.) и ImageMagick convert используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав output.
Если кто-то интересуется математикой, вот как я это сделал. Для создания многоугольника с различным количеством ребер или разных фигур с помощью Imagemagick процедура будет одинаковой: выполните математику и добавьте или удалите точки в эту часть кода "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y".
[ ! d16]
Используя ту же идею принятого ответа, я создал другой скрипт для создания шестиугольных скриншотов, и я делюсь им здесь, если это полезно для кого-то другого.
#!/bin/bash
output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png
read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x1=$X
y1=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
x2=$X
y2=$Y
gnome-screenshot -f $temp_screenshot
radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)")
ca=$(bc -l <<<"$radius/sqrt(3)")
h=$(bc -l <<<"$radius/(sqrt(3)/2)")
P1_x=$(bc <<<"$x1+$ca")
P1_y=$(bc <<<"$y1+$radius")
P2_x=$(bc <<<"$x1+$h")
P2_y=$(bc <<<"$y1")
P3_x=$(bc <<<"$x1+$ca")
P3_y=$(bc <<<"$y1-$radius")
P4_x=$(bc <<<"$x1-$ca")
P4_y=$(bc <<<"$y1-$radius")
P5_x=$(bc <<<"$x1-$h")
P5_y=$(bc <<<"$y1")
P6_x=$(bc <<<"$x1-$ca")
P6_y=$(bc <<<"$y1+$radius")
convert $temp_screenshot -alpha on \
\( +clone -channel a -evaluate multiply 0 -draw \
"polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \
-compose DstIn -composite -trim "$output"
Процесс в точности совпадает с принятым ответом. В этом случае я просто изменил имя сценария:
«Сохраните его, например, ~/hexagonal_screenshot.bash, и сделайте его исполняемым с помощью chmod +x ~/hexagonal_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши на в центральном положении и нажмите «Ввод», а затем переместите его в положение края (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите «Ввод». Затем экран мерцает во время снятия снимка (я рекомендую использовать scrot $temp_screenshot, это не показывает это нечетное поведение.) и ImageMagick convert используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав output.
Если кто-то интересуется математикой, вот как я это сделал. Для создания многоугольника с различным количеством ребер или разных фигур с помощью Imagemagick процедура будет одинаковой: выполните математику и добавьте или удалите точки в эту часть кода "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y".
[ ! d16]