Кейс (Shell): найдите проблему в простом bash-скрипте, который ломается на именах файлов с пробелами: for…
Кейс (Shell): найдите проблему в простом bash-скрипте, который ломается на именах файлов с пробелами: for f in $(ls *.txt); do mv "$f" "${f%.txt}.bak"; done — объясните причину и предложите корректный
Ответ на вопрос
Проблема: конструкция `for f in $(ls *.txt); …` ломается, потому что `$(...)` выполняет командную подстановку, затем оболочка выполняет разбиение по пробелам/символам из `IFS` и словоразделение — имена файлов с пробелами (или табами, переводами строк) разбиваются на несколько слов. Кроме того, парсить вывод `ls` ненадёжно (имена могут содержать новые строки и другие спецсимволы).
Коррекция (простой и обычно достаточный вариант):
for f in *.txt; do
[ -e "$f" ] || continue
mv -- "$f" "${f%.txt}.bak"
done
Пояснения:
- `for f in *.txt` использует расширение шаблона оболочкой и даёт каждый файл как отдельный элемент (пробелы внутри имён сохраняются).
- `"$f"` — обязательное кавычение при работе с именами.
- `--` в `mv --` защищает от имён, начинающихся с `-`.
- `[ -e "$f" ] || continue` пропускает случай, когда шаблон не совпал и остался литералом `*.txt`.
Ещё более надёжный вариант (обрабатывает любые символы, включая переводы строк):
find . -maxdepth 1 -type f -name '*.txt' -print0 | while IFS= read -r -d '' f; do
mv -- "$f" "${f%.txt}.bak"
done
(в этом варианте имена будут с префиксом `./`; при необходимости их можно убрать).
Еще
Высчитать минимальные маски посети у пула адресов? Доброго всем времени суток! Имеется txt файл с 1,35 миллиона…
Собственно вопрос: имеется ли какие-либо программы или возможно кто-то встречал готовые Python/Bash скрипты с данной реализацией?
Ответ на вопрос
Для вычисления минимальных масок подсетей по заданному списку IP адресов вы можете воспользоваться инструментом ipcalc, который доступен в большинстве дистрибутивов Linux. Программа ipcalc позволяет вычислять минимальные маски для заданных IP адресов.Пример использования ipcalc:Установите ipcalc, если он не установлен на вашем компьютере:sudo apt-get install ipcalcСоздайте файл с вашим списком IP адресов, например, ip_list.txt.Запустите ipcalc и передайте ему файл с IP адресами:ipcalc -f ip_list.txtЭтот инструмент поможет вам быстро рассчитать минимальные маски подсетей для списка IP адресов. Если вам нужно создать скрипт на Python или Bash для автоматизации этой задачи, вы можете воспользоваться стандартными возможностями этих языков программирования для обработки данных из файла и вызова утилиты ipcalc. Для этого вам потребуется знание работы с файлами и строками в выбранном языке программирования.Надеюсь, эта информация будет полезной для вашего проекта! Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться. Удачи!
Еще
Как определить сервис systemd, вызвавший bash-скрипт на исполнение? Добрый день, столкнулся с небольшой…
systemd, вызвавший bash-скрипт на исполнение? Добрый день, столкнулся с небольшой проблемой. Цель такая- в каждом из необходимых .service файлов на событие OnFailure поставить запуск скрипта, который будет
Ответ на вопрос
Для определения сервиса, вызвавшего bash-скрипт, можно воспользоваться переменной $SERVICE_NAME, которая автоматически устанавливается systemd перед запуском OnFailure скрипта. Например:#!/bin/bash
service_name=$1
# Отправляем уведомление через телеграм-бота о сбое сервиса
telegram_message="Сбой сервиса $service_name"
curl -s -X POST https://api.telegram.org/bot<token>/sendMessage -d chat_id=<chat_id> -d text="$telegram_message"Затем в .service файле, в секции [Unit], можно указать вызов скрипта с передачей имени сервиса в качестве аргумента:[Unit]
Description=Some service
After=network.target
[Service]
Type=simple
ExecStart=/path/to/service_executable
Restart=on-failure
RestartSec=5s
StartLimitInterval=0
Environment=SERVICE_NAME=Some service
[Install]
WantedBy=multi-user.target
OnFailure=/path/to/telegram_script.sh %NТаким образом, когда сервис упадет и будет вызван скрипт, переменная $SERVICE_NAME будет содержать имя сервиса, который вызвал скрипт, и это имя можно использовать в уведомлении через телеграм-бота.
Еще
Как заставить bash-скрипт нажимать сочетание клавиш? Т.к. тема с вай-фаем не была удачно решена, и решений…
Как заставить bash-скрипт нажимать сочетание клавиш? Т.к. тема с вай-фаем не была удачно решена, и решений не предвидится, остается последний вариант, если это возможно, заставить систему после выхода
Ответ на вопрос
Вам может помочь использование инструмента xdotool, который позволяет автоматизировать ввод клавиатурных нажатий в Linux. Для того чтобы заставить систему после выхода из спящего режима нажимать сочетание клавиш Fn+F2, вы можете написать скрипт вида:#!/bin/bash
# Подождать 10 секунд после выхода из сна
sleep 10
# Нажатие клавиш Fn и F2
xdotool keydown "Fn" keydown "F2"Сохраните этот скрипт, дайте ему права на выполнение (chmod +x script.sh) и добавьте его в автозапуск после выхода из сна.Обратите внимание, что точные команды и тайминги могут отличаться в зависимости от вашей операционной системы и окружения. Необходимо провести тесты и настроить скрипт для вашей конкретной системы.
Еще
Линукс bash Написать простейший bash скрипт, который выведет текст, представленный в качестве аргумента,…
Линукс bash Написать простейший bash скрипт, который выведет текст, представленный в качестве аргумента, имя редактора, использованного для создания файла, и будет ли текст длиной более 10 символов в одной
Ответ на вопрос
!/bin/bashtext="$1"
editor=$(basename $EDITOR)if [ ${#text} -gt 10 ]; then
output="\"$text\"; \"$editor\"; \"more than 10 symbols\""
else
output="\"$text\"; \"$editor\"; \"less than or equal to 10 symbols\""
fiecho $output
Еще
Запуск bash скрипта по хоткею? Ситуация такова: есть Linux Mint, есть скрипт, нужно запускать скрипт по нажатию…
Запуск bash скрипта по хоткею? Ситуация такова: есть Linux Mint, есть скрипт, нужно запускать скрипт по нажатию «Ctrl+T». Запускается он один раз, делает свое дело и выключается.Если интересно, код скрипта#
Ответ на вопрос
Для того чтобы запустить bash скрипт по горячей клавише, вы можете использовать команду bash /путь_к_скрипту/.translate.sh. Таким образом, вам необходимо изменить команду привязки к горячей клавише на bash /путь_к_скрипту/.translate.sh. После этого сохраните изменения и попробуйте нажать сочетание клавиш Ctrl+T, чтобы выполнить скрипт. Если возникнут другие проблемы, попробуйте также добавить права выполнения скрипту с помощью команды chmod +x /путь_к_скрипту/.translate.sh.Надеюсь, это поможет вам запустить скрипт по горячей клавише.
Еще
Какой выбрать GUI менеджер контроль-скриптов? Здравствуйте! Так вопрос, мне нужен gui менеджер который смог…
менеджер контроль-скриптов? Здравствуйте! Так вопрос, мне нужен gui менеджер который смог бы контролировать работу разных скриптов .py .bash .cmd и т.дПример: Менеджер запускает простой скрипт "curl который
Ответ на вопрос
Для управления и контроля работы различных скриптов в разное время с различными событиями, вы можете рассмотреть использование таких инструментов как Ansible, Puppet или Chef. Они позволяют автоматизировать различные задачи, включая запуск скриптов и мониторинг их работы. Кроме того, вы можете использовать удобный графический интерфейс для управления этими инструментами, такой как AWX (бесплатная версия Ansible Tower) или Puppet Enterprise Console.Также вы можете рассмотреть использование специализированных систем управления задачами и мониторинга, таких как Nagios, Zabbix или Prometheus. Они позволяют создавать и контролировать работу различных скриптов, а также настраивать уведомления о возможных проблемах.Выбор конкретного инструмента зависит от ваших конкретных потребностей и предпочтений, но перечисленные варианты могут быть хорошими кандидатами для вашего случая использования.
Еще
Как скачать файлы по ссылкам из таблицы? Люди добрые помогите пожалуйста со скриптом на bash, имеется таблица…
Как скачать файлы по ссылкам из таблицы? Люди добрые помогите пожалуйста со скриптом на bash, имеется таблица с ФИО и ссылкой на фотку, как скачать фотку и переименовать её в ФИО? нужно срочно, а сообразить
Ответ на вопрос
Конечно, вот пример скрипта на Bash, который скачивает файлы по ссылкам из таблицы:#!/bin/bash
# Чтение таблицы с ФИО и ссылками на фото
while IFS=$'\t' read -r fio photo_link; do
# Получение имени файла из ссылки на фото
filename=$(basename "$photo_link")
# Скачивание файла по ссылке
wget "$photo_link" -O "$filename"
# Переименование файла в ФИО
mv "$filename" "$fio"
done < table.txtЗамените table.txt на название вашего файла с таблицей, где ФИО и ссылки на фото разделены табуляцией. После выполнения этого скрипта в текущей директории будут сохранены фотографии с именами, соответствующими ФИО из таблицы.
Еще
Выбор языка для написания скриптов/простеньких приложений под Linux? Сейчас работаю в основном на Linux и…
языка для написания скриптов/простеньких приложений под Linux? Сейчас работаю в основном на Linux и зачастую нужно писать простенькие скрипты/приложения. В данный момент делаю это на bash и хочу освоить более
Ответ на вопрос
Я бы посоветовал вам начать с изучения Python. Этот язык программирования более универсальный, легкий в освоении и имеет обширное сообщество разработчиков, что делает его отличным выбором для написания скриптов и простых приложений под Linux.
Python также имеет большое количество доступных библиотек и модулей, которые облегчают разработку программ и ускоряют процесс написания кода.
Кроме того, Python широко используется в сферах разработки веб-приложений, научных и исследовательских работ, автоматизации и многих других областях, что может быть полезно для вас в будущем.
Так что мой выбор - изучение Python для создания скриптов и приложений под Linux.
Еще
Скрипт ifup и centos? нужно при поднятии интерфейса курлом дергать урл в файл добавил /sbin/ifup-local#!/bin/bash…
Скрипт ifup и centos? нужно при поднятии интерфейса курлом дергать урл в файл добавил /sbin/ifup-local#!/bin/bash PATH=/sbin:/usr/sbin:/bin:/usr/bin curl http://url.com при ребуте все срабатывает, а когда
Ответ на вопрос
В CentOS скрипт ifup-local не используется по умолчанию, вместо этого вы можете использовать скрипты в каталоге /etc/sysconfig/network-scripts/ifup-post.d/. Для того чтобы при поднятии интерфейса выполнялся curl на определенный URL, вам нужно создать скрипт в этой директории. Например, вы можете создать скрипт с именем 99-curl-up с таким содержанием:#!/bin/bash
curl http://url.comУбедитесь, что скрипт имеет права на выполнение:chmod +x /etc/sysconfig/network-scripts/ifup-post.d/99-curl-upПосле этого при каждом поднятии интерфейса в CentOS будет выполняться curl на указанный URL.
Еще
Как правильно выгружать Docker проект со множеством контейнеров в AWS(ECS)? У меня есть проект с 4 images, которые…
немного)https://github.com/chadfurman/rpg-boilerplate/issues/19 PS Все это локально запускается через скрипт docker/run.sh#!/bin/bash set -e COMPOSE_PROJECT_NAME=rpgboilerplate # Linux fix CONFIG_FILE=docker-compose
Ответ на вопрос
Для выгрузки Docker проекта с множеством контейнеров в AWS ECS, вам следует использовать следующие шаги:Создайте ECS кластер и зарегистрируйте контейнеры как Task. Убедитесь, что все контейнеры (api, frontend, db, nginx) добавлены как отдельные сервисы в вашем ECS Task.Загрузите все 4 образа (api, frontend, db, nginx) в репозиторий AWS ECR (Elastic Container Registry). Запустите каждый образ в репозитории в соответствии с их сервисами.Проверьте вашу конфигурацию задачи (Task Definition) в ECS Console, чтобы убедиться, что все зависимости и параметры (порты, volumes, переменные окружения) правильно настроены для каждого сервиса.Запустите вашу задачу в ECS кластере, запуская каждый сервис по очереди. Убедитесь, что все контейнеры успешно запускаются и работают.Если у вас возникают проблемы с запуском конкретного сервиса (например, nginx), проверьте логи контейнера и конфигурацию задачи, чтобы найти причину проблемы.Используйте AWS CLI или AWS Management Console для управления вашими задачами в ECS и мониторинга их состояния. Следуя этим шагам, вы сможете успешно выгрузить ваш Docker проект со множеством контейнеров на AWS ECS.
Еще