====== Удалить '\r' ====== Если создавать файлы скриптов в Windows не настроив предварительно редактор, или копировать весь текст, то скорее всего в тексте окажется симвор ''\r'', обычно он скрыт от глаз, но сильно мешает запуску скриптов в Linux. Вот несколько вариантов как от них избавиться... ===== Var 1 ===== sudo apt install dos2unix dos2unix имя_файла ===== Var 2 ===== sed -i 's/\r$//' имя_файла ===== Var 3 ===== perl -pi -e 's/\r$//' имя_файла ===== Var 4 ===== tr -d '\r' < input.sh > output.sh ===== Скрипт ===== Скрипт для удаленя '\r' символа возврата каретки, на коотрый любит ругаться bash.\\ Для работы потребуется [[niceos:fzf|fzf]], устанавливается автоматически.\\ #!/bin/bash # ==AUTOEXEC== # === \R remover === # * удалить из файлов скриптов '\r' на которые bash любит ругаться # # Каталоги для поиска TOP_LEVEL_DIR="$HOME" RECURSIVE_DIR="$HOME/scripts" # Установка fzf при необходимости if ! command -v fzf >/dev/null; then echo "🔧 Установка fzf..." if [ "$EUID" -ne 0 ]; then sudo apt install -y fzf else apt install -y fzf fi fi # Поиск файлов: # - в $HOME без подкаталогов # - в ~/scripts с подкаталогами mapfile -t FILES < <( find "$TOP_LEVEL_DIR" -maxdepth 1 -type f -name "*.sh" 2>/dev/null find "$RECURSIVE_DIR" -type f -name "*.sh" 2>/dev/null ) # Проверка наличия файлов if [ ${#FILES[@]} -eq 0 ]; then echo "🟡 Скрипты .sh не найдены." exit 0 fi # Выбор через fzf SELECTED=$(printf "%s\n" "${FILES[@]}" | fzf --multi --prompt="Выберите скрипты для исправления \\r: ") if [ -z "$SELECTED" ]; then echo "🔕 Отменено." exit 0 fi # Подтверждение echo echo "Будут обработаны следующие скрипты:" echo "$SELECTED" echo read -p "Удалить символы возврата каретки (\\r)? [y/N] " CONFIRM [[ "$CONFIRM" =~ ^[Yy]$ ]] || { echo "❌ Отменено."; exit 0; } # Удаление \r while IFS= read -r FILE; do echo "✏️ Обработка: $FILE" sed -i 's/\r$//' "$FILE" done <<< "$SELECTED" echo "✅ Завершено." exit 0