for file in Cadence*
do
mv -i "${file}" "${file/John/Krishna}"
done
Я способный выполнить копию сценария и вставку на терминале это работает отлично, но после создания .sh файла, и выполнитесь, бросает ошибку как синтаксическая ошибка.
./bulkCopyFiles.sh > fedora.txt
./bulkCopyFiles.sh: line 2: syntax error near unexpected token `$'do\r''
'/bulkCopyFiles.sh: line 2: `do
Существует 2 проблемы.
syntax error near unexpected token `$'do\r''
Похоже на использование окончаний строки стиля Microsoft (\r\n
или CR-LF) вместо стиля Unix (\n
или только LF). Большинству интерпретаторов оболочки не нравятся они.
Можно преобразовать окончания строки с dos2unix
:
dos2unix bulkCopyFiles.sh
Необходимо поместить Хижину в начале сценария Bash, чтобы указать, что он должен быть интерпретирован Bash.
#!/bin/bash
for file in Cadence*
do
mv -i "${file}" "${file/John/Krishna}"
done
Иначе Linux примет значение по умолчанию к /bin/sh
интерпретатор, который не является, избивает Ubuntu, но некоторый другой подобный Границе интерпретатор с меньшим набором функций языка (в Ubuntu, это - Тире). В этом случае Тире незнаком с заменяющим расширением параметра шаблона Bash.
Используйте Shellcheck (также доступный в одноименном пакете shellcheck
) проверить синтаксис Ваших сценариев оболочки. Для Вашего это предлагает:
Line 1:
for file in Cadence*
^-- SC2148: Tips depend on target shell and yours is unknown. Add a shebang.