Инструменты пользователя

Инструменты сайта


projects:r_remover

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
projects:r_remover [2025/03/27 11:50] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1projects:r_remover [2025/03/27 22:51] (текущий)
Строка 1: Строка 1:
 +====== Удалить '\r' ======
  
 +Если создавать файлы скриптов в Windows не настроив предварительно редактор, или копировать весь текст, то скорее всего в тексте окажется симвор ''\r'', обычно он скрыт от глаз, но сильно мешает запуску скриптов в Linux.
 +Вот несколько вариантов как от них избавиться...
 +
 +===== Var 1 =====
 +<code bash>
 +sudo apt install dos2unix
 +</code>
 +<code bash>
 +dos2unix имя_файла
 +</code>
 +===== Var 2 =====
 +<code bash>
 +sed -i 's/\r$//' имя_файла
 +</code>
 +===== Var 3 =====
 +<code bash>
 +perl -pi -e 's/\r$//' имя_файла
 +</code>
 +===== Var 4 =====
 +<code bash>
 +tr -d '\r' < input.sh > output.sh
 +</code>
 +
 +===== Скрипт =====
 +Скрипт для удаленя '\r' символа возврата каретки, на коотрый любит ругаться bash.\\
 +Для работы потребуется [[niceos:fzf|fzf]], устанавливается автоматически.\\
 +
 +<code bash>
 +#!/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
 +
 +</code>

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki