Сsed
:
sed '/^test_1/s/,[^,]*//2' file
/^test_1/
поиск строк, начинающихся с test_1
, затем s/,[^,]*//2
заменить второе вхождение запятой, за которой следуют любые символы, не являющиеся запятыми -, пустой строкой You can add below commands to kill the battery script while logging in
ps -eaf | awk 'BEGIN{IGNORECASE=1}/battery/ && !/awk/{print "kill -9 "$2}'| sh
Вы можете добавить в скрипт механизм файла блокировки. Просто убедитесь, что файл блокировки надежно удален при выходе из скрипта, например. установив ловушку:
#!/bin/bash
lockfile="/var/run/lock/batterystatus.lock"
if [[ -e "$lockfile" ]]; then exit 0; fi
trap 'rm -f "$lockfile"' EXIT
touch "$lockfile"
#... your actual script code here
Обратите внимание, что в случае завершения скрипта с помощью SIGKILL
, trap
будет недостаточно для надежного удаления файла блокировки.
После полезного разъяснения Камиля Мациоровски, вот улучшенная версия с использованием flock
.
#!/bin/bash
lockfile="/var/run/lock/batterystatus.lock"
exec 100>"$lockfile"
if ! flock -n 100; then exit 0; fi
#... your actual script here
Это создаст файл блокировки, если необходимо, и перенаправит дескриптор файла 100
(, выбранный почти произвольно)(1 ), в файл блокировки. Затем он пытается заблокировать этот файловый дескриптор через flock
.Если это удастся, блокировка будет удерживаться до выхода скрипта. Если, с другой стороны, другой экземпляр сценария уже заблокировал этот файловый дескриптор, сценарий немедленно завершится.
Обратите внимание, что нет необходимости очищать файл блокировки -блокировка, выполняемая flock
, имеет значение здесь. Это также означает, что существование файла блокировки не означает, что скрипт не должен запускаться -, а только наличие блокировки на этом файле.
Идея взята из здесь . Для дальнейшего чтения взгляните на
(1)Если у вас Bash > 4.1, вы можете сделать так, чтобы оболочка автоматически -выделяла свободный файловый дескриптор с помощью синтаксиса {variable-name}>redirection-target
-, как в:
exec {lockfd}>"$lockfile"
if ! flock -n "$lockfd"; then exit 0; fi
Оболочка найдет следующий свободный файловый дескриптор (с тем ограничением, что используются только номера дескрипторов > 9 ), и сохранит фактически используемый дескриптор в переменной $lockfd
для дальнейшего использования.