Запущение скрипта в терминале работает отлично, но после создания .sh файл выполненная ошибка бросков

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
0
задан 2 May 2018 в 02:04

1 ответ

Существует 2 проблемы.

1 окончание Строки

syntax error near unexpected token `$'do\r''

Похоже на использование окончаний строки стиля Microsoft (\r\n или CR-LF) вместо стиля Unix (\n или только LF). Большинству интерпретаторов оболочки не нравятся они.

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

dos2unix bulkCopyFiles.sh

2 выбора Интерпретатора / Хижина

Необходимо поместить Хижину в начале сценария Bash, чтобы указать, что он должен быть интерпретирован Bash.

#!/bin/bash
for file in Cadence*
do
  mv -i "${file}" "${file/John/Krishna}"
done

Иначе Linux примет значение по умолчанию к /bin/sh интерпретатор, который не является, избивает Ubuntu, но некоторый другой подобный Границе интерпретатор с меньшим набором функций языка (в Ubuntu, это - Тире). В этом случае Тире незнаком с заменяющим расширением параметра шаблона Bash.

Приложение: Shellcheck

Используйте Shellcheck (также доступный в одноименном пакете shellcheck) проверить синтаксис Ваших сценариев оболочки. Для Вашего это предлагает:

Line 1:
for file in Cadence*
^-- SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
4
ответ дан 29 October 2019 в 23:54

Другие вопросы по тегам:

Похожие вопросы: