Хотя вы просили найти решение без дополнительных инструментов, это мой любимый способ использования flock
:
#!/bin/sh
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
echo "servus!"
sleep 10
Это взято из раздела примеров man flock
, в котором дополнительно объясняется:
Т это полезный шаблонный код для сценариев оболочки. Поместите его в начало сценария оболочки, который вы хотите заблокировать, и он автоматически заблокируется при первом запуске. Если env var $ FLOCKER не настроен на запускаемый сценарий оболочки, выполните flock и захватите исключительную неблокирующую блокировку (используя сам сценарий в качестве файла блокировки) перед повторным запуском с правильными аргументами. Он также устанавливает правильное значение переменной env FLOCKER, чтобы она больше не запускалась.
На что следует обратить внимание:
flock
, пример сценария завершается с ошибкой, если он не может быть найден Не решение для командной строки, но вы можете открыть диалоговое окно «Настройки» и закрыть его, чтобы перезагрузить файл конфигурации вручную, не убивая Терминатора.
Я только что написал этот очень слепой/хрупкий скрипт для программного перемещения мыши, чтобы пройти этапы изменения цветовой схемы через окно настроек Terminator с помощью xdotool (sudo apt-get install xdotool
). Он перемещает мышь по координатам x, y на экране, и я обнаружил, что координаты x, y на моем экране чисто методом проб и ошибок -понятия не имеют, будут ли координаты такими же на других компьютерах. У меня Ubuntu 20.
#!/bin/bash
if [ "$1" != "light" ] && [ "$1" != "dark" ]; then
echo "Need to pass \"light\" or \"dark\" as arg"
exit 1
fi
xdotool mousemove 100 100
xdotool click 3
xdotool mousemove 140 350
xdotool click 1
xdotool mousemove 140 100
sleep 1
xdotool click 1
xdotool mousemove 420 140
xdotool click 1
xdotool mousemove 420 250
xdotool click 1
if [ "$1" = "light" ]; then
xdotool mousemove 420 230
xdotool click 1
else
xdotool mousemove 420 280
xdotool click 1
fi
xdotool mousemove 840 720
xdotool click 1
Вероятно, есть способы использовать какой-нибудь Selenium -подобный инструмент для Linux (Я думаю, что видел некоторые описанные для Ubuntu, которые используют OpenCV для анализа пикселей вашего экрана, чтобы найти координаты определенных кнопок )это фактически выберет кнопки на основе их текста, но теперь это работает для меня. Делюсь, если кто-то застрял с этой неприятной проблемой.