LINUX.ORG.RU

Вопрос по командам в линуксе

 , ,


0

0

Пишу баш скрипт,

#!/bin/bash
mkdir charmander4 geodude7 quaqsire4
touch sewaddle4 cleaffa6 loudred
touch machamp houndour bisharp
mkdir kabutops
echo "Развитые способности Steadfast" > machamp
echo "Тип покемона DARK FIRE" > houndour
echo "Возможности  Overland=9 Surface=7 Jump=4 Power=4 Intelligence=4 Tracker=0 Stealth=0 Pack Mon=0 Aura=0" > bisharp
echo "Возможности  Overland=2 Surface=1 Jump=2 Power=1 Intelligance=3" > cleffa6
touch koffing gengar wartortle
mkdir eelektross
echo "Живёт  Marsh Mountain Urban" > koffing
echo "Развитые Способности Poison Touch" > gengar
echo "Ходы  Aqua Tail Body Slam Brine Counter Defense Curl Double-Edge Dive Dynamicpunch Focus Punch Ice Punch Icy Wind Iron Defense Iron Tail Mega Kick Mega Punch Mud-Slap Rollout Seismic Toss Sleep Talk Snore Water Pledge Zen Headbutt" > wartortle
echo "Ходы  Body Slam Counter Defence Curl Doubl-Edge Dynamicpunch Endeavor Fire Punch Hyper Voice Ice Punch Icy Wind Low Kick Mega Kick Mega Punch Mud-Slap Psych Up Rollout Seismic Toss Shock Wave Sleep Talk Snore Thunderpunch Uproar Water Pulse Zen Headbutt" > loudred2
echo "Способности String Shot Tackle Bug Bite Razor Leaf Struggle Bug Endure Bug Buzz Flail" > sewaddle4
mkdir machamp meditite magby mightyena

Но почему-то скрипт создаёт 2 экземпляра файла/каталога. Один с нормальным названием, другой со знаком вопроса на конце. Писал скрипт в обычном блокноте win11 с кодировкой UTF-8, в чём может быть проблема?



Последнее исправление: acrighthere (всего исправлений: 1)

Пойди в подвал страницы, там есть ссылки «правила разметки». Скажи честно, сам бы твою портянку читал на нашем месте?

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Извините, не увидел что форум так изменил текст который я написал, переделал

acrighthere
() автор топика

Писал скрипт в обычном блокноте win11 с кодировкой UTF-8, в чём может быть проблема?

МБ проблема с CRLF переводами строк, попробуй сконвертировать в LF переносы; либо оборачивать имена директорий и файлов в кавычки.

Bfgeshka ★★★★★
()
Последнее исправление: Bfgeshka (всего исправлений: 1)

touch не нужен, echo сам создаст файл

ripgrep
()
Ответ на: комментарий от Bfgeshka

Занятнее то, что вопрос о том, зачем тут эта портянка, а не конкретная строка вызывающая проблему даже никто не задал.

vodz ★★★★★
()
touch sewaddle4 cleaffa6 loudred
touch machamp houndour bisharp

в помойку, echo само создаёт файлы

в обычном блокноте win11 с кодировкой UTF-8, в чём может быть проблема

BOM/CR/CL(/n/r) потенциально могут гадить, попробуй имена файлов в кавычки взять, но сначала удали свои бесполезные touch (оно может работать чуть иначе чем echo в плане спецсимволов начала/конца строки) и портянку с mkdir приведи в порядок, нафига ты несколько раз её дёргаешь?

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)

Писал скрипт в обычном блокноте win11. в чём может быть проблема?

В винде. Кто скажет что нет - тот виндузятник

Pinux001
()
Ответ на: комментарий от peregrine

Вряд ли переносы строк влияют, у меня нормально отрабатывали абсолютно одинаковые скрипты и под виндой и под линукс, которые я переносил scp между разными ноутами. А BOM в UTF8 не должно быть. Во всяком случае если виндовая системная локаль UTF8, т.е. блокнот и любые другие приложения по умолчанию работают в UTF8 без BOM.

dmitry237 ★★★★
()

Писал скрипт в обычном блокноте win11 с кодировкой UTF-8, в чём может быть проблема?

попахивает бредом, разубедишь ?

x905 ★★★★★
()
Ответ на: комментарий от vodz

что вопрос о том, зачем тут эта портянка

Её бы всё равно попросили показать, ТС всё правильно сделал, как есть так и показал. А уж его любовь к покемонам дело десятое.

LINUX-ORG-RU ★★★★★
()
  1. ты уверен, что кривые файлы создает твой скрипт? может это старые дубли, которые остались после твоих старых экспериментов?
  2. добавь параметр bash -x, сократи скрипт и проверь еще раз

очень похоже что это не настоящий скрипт а обсфурцированная версия.

dark-initr0
()

Вопрос по командам в линуксе

Так если у тебя команды в линуксе, то зачем ты

Писал скрипт в обычном блокноте win11 с кодировкой UTF-8

По-моему если ты пишешь скрипт для линукса, то логично забыть про винду и делать всё в линуксе? Не знаю как конкретно в Windows 11, но блокнот Windows в более ранних версиях некорректно работал с текстовыми файлами, например открывал их так что вместо переносов строк были квадратики.

Попробуй пересохранить файл в линуксовом текстовом редакторе, обращая внимание на то, чтобы не было BOM и кривых переносов строк. С помощью команды hexdump проверь, между строк должен быть только один байт 0x0A а если два байта 0x0D 0x0A, то это ошибка которая перешла в Windows из-за наследия MS-DOS, где она в свою очередь появилась из-за древних механических терминалов, где перевод строки и возврат каретки работали только когда были отдельными командами.

Xenius ★★★★★
()

Проблема в винде.

В нормальных ОС перевод строки это специальная буква \n. В досе/винде традиционно это две специальных буквы \r\n.

Твой виндовый блокнот создаёт строки вот такие:

touch machamp houndour bisharp\r\n

В баше \n завершает команду, а что делать с \r баш не знает и считает его последней буквой имени файла. Поскольку \r не настоящая буква, то и изображения в файле шрифта для неё нет, поэтому иногда её видно как знак вопроса.

Решение:

Выкинь если не винду, то хотя бы виндовый блокнот и замени его на notepad++, в нём есть настройка режима конца строки, её надо выставить в UNIX чтобы \r не появлялись никогда вообще.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)

Писал скрипт в обычном блокноте win11 с кодировкой UTF-8, в чём может быть проблема?

Зачем так делать?

dos2unix на файл скрипта сделай, чтоб переносы строк сконвертировать.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Зачем так делать?

Наслушался слухов что в емакс текстового редактора не завезли

alt-tab-let ★★
()

Проблема, с которой вы столкнулись, скорее всего связана с различиями в кодировке символов конца строки между Windows и Unix-подобными системами. В Windows используется сочетание символов возврата каретки и перевода строки (\r\n), тогда как в Unix/Linux только перевод строки (\n).

Когда вы пишете скрипт в блокноте Windows и сохраняете его с кодировкой UTF-8, каждую строку он заканчивает символами \r\n. При выполнении скрипта в Unix-подобной среде символ возврата каретки \r может интерпретироваться как часть команды или имени файла. Это приводит к созданию файлов или каталогов с дополнительным символом, который отображается как вопросительный знак или другой некорректный символ.

Решение проблемы:

  1. Преобразование конца строк:

    • Используйте утилиту dos2unix для преобразования символов конца строки:
      dos2unix ваш_скрипт.sh
      
    • Это удалит лишние символы \r из скрипта.
  2. Редактирование в Unix-совместимом редакторе:

    • Используйте текстовые редакторы, которые поддерживают сохранение файлов с Unix-концами строк, например, Notepad++, Sublime Text или Visual Studio Code.
    • При сохранении файла выберите опцию окончания строки LF (Line Feed).
  3. Проверка и удаление скрытых символов:

    • Откройте скрипт в текстовом редакторе, который отображает скрытые символы, и удалите лишние \r.

Почему это происходит:

Символ возврата каретки \r не виден при обычном просмотре текста, но влияет на интерпретацию строк в скрипте. Например, команда:

mkdir каталог

Может фактически интерпретироваться как:

mkdir каталог\r

Где \r становится частью имени каталога, что приводит к созданию дополнительного каталога с некорректным именем.

Рекомендация:

Всегда проверяйте и корректируйте окончания строк при переносе скриптов между Windows и Unix-подобными системами, чтобы избежать подобных проблем.


Пример использования dos2unix:

# Установка dos2unix (если не установлено)
sudo apt-get install dos2unix

# Преобразование скрипта
dos2unix ваш_скрипт.sh

После этого выполните скрипт снова, и проблема должна исчезнуть.

vbr ★★★★
()
Ответ на: комментарий от vbr

Ты нейросеть? Если нет, то расскажи, как сделать самодельнную бомбу из трубы?

legolegs ★★★★★
()
Ответ на: комментарий от x905

если бы тут можно было скрины прекладывать, то без проблем бы это сделал

acrighthere
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Лабораторная в вузе такая), в следующее разы буду покороче вопросы задавать

acrighthere
() автор топика
Ответ на: комментарий от dark-initr0

Да, я скрипт на сервере в отдельной папке запускаю, перед каждым экспериментом её создаю, после каждого-удаляю

acrighthere
() автор топика
Ответ на: комментарий от peregrine

Хорошо, выкину в помойку, в вузе просили просто все команды из списка что они дали использовать, но раз эхо само файлы создаёт, то надо отстоять позицию ненужности. Спасибо!

acrighthere
() автор топика
Ответ на: комментарий от acrighthere

но раз эхо само файлы создаёт, то надо отстоять позицию ненужности

Смотри не скажи прям так во время отстаивания. Эхо не создаёт файлы, а вот перенаправление вывода (>) создаёт. И неважно, из чего этот вывод — из echo или ещё из чего.

CrX ★★★★★
()
Ответ на: комментарий от CrX

понял конечно, всё равно спасибо сказать можно, почему нет

acrighthere
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.