#shell #eslint
#оболочка #eslint
Вопрос:
Я пытаюсь написать простой shell
скрипт, который будет запускать linter для многих файлов. Я сохранил все имена своих файлов в одной длинной строке, а затем также удалил /n
из нее все потенциальные знаки. Затем я запускаю linter с жестко запрограммированным именем этих файлов и беру из переменной. Для жестко запрограммированных путей мой линтер работает и может найти эти файлы, но для пути к этим файлам, хранящимся в переменной, он не может.
Вот что я попробовал:
#!/bin/sh
all_files_to_commit=$(git diff --name-only --cached)
ends_with_ts=".*.ts$"
ends_with_scss=".*.scss$"
all_ts_files=""
all_scss_files=""
for file in $all_files_to_commit
do
if echo "$file" | grep "$ends_with_ts"; then
all_ts_files="${all_ts_files}${file} "
fi
if echo "$file" | grep "$ends_with_scss"; then
all_scss_files="${all_scss_files}${file} "
fi
done
all_ts_files=$(echo "$all_ts_files" | tr -d "n")
echo "All files in one string"
echo "$all_ts_files"
./node_modules/.bin/eslint src/components/List/List.ts src/views/Calculator/Calculator.ts --quiet
./node_modules/.bin/eslint "$all_ts_files" --quiet
Есть ли у вас какие-либо идеи, почему эти пути могут отличаться и как я могу это исправить?
Я также попробовал этот скрипт без строки, который удаляет
n
знаки
Вывод:
All files in one string
src/components/List/List.ts src/views/Calculator/Calculator.ts
/home/kaczor6418/Desktop/projects/expressions-calculator/src/components/List/List.ts
24:9 error Delete `·············` prettier/prettier
/home/kaczor6418/Desktop/projects/expressions-calculator/src/views/Calculator/Calculator.ts
53:9 error Unexpected var, use let or const instead no-var
54:9 error Delete `············` prettier/prettier
✖ 3 problems (3 errors, 0 warnings)
3 errors and 0 warnings potentially fixable with the `--fix` option.
Oops! Something went wrong! :(
ESLint: 7.11.0
No files matching the pattern "src/components/List/List.ts src/views/Calculator/Calculator.ts " were found.
Please check for typing mistakes in the pattern.
Ответ №1:
С кавычками в
./node_modules/.bin/eslint "$all_ts_files" --quiet
найденные имена файлов объединяются в одно имя файла с пробелами.
Строка src/components/List/List.ts src/views/Calculator/Calculator.ts
не представляет файл (у вас нет каталога с именем List.ts src
).
С заданными именами файлов вы можете удалить кавычки:
./node_modules/.bin/eslint $all_ts_files --quiet
Когда вы создаете строку из списка имен файлов, вы не можете видеть, когда пробел (или перевод строки) является частью имени файла.
В вашем примере вы могли бы попробовать использовать массивы:
all_files_to_commit=($(git diff --name-only --cached))
# change code here when you want to use arrays
./node_modules/.bin/eslint ${all_ts_files[@]} --quiet
или используйте что-то вроде
./node_modules/.bin/eslint $(git diff --name-only --cached | grep ts$) --quiet
Вы можете поддерживать пробелы в именах файлов (не в новых строках) с помощью
./node_modules/.bin/eslint $(git diff --name-only --cached | sed -n '/ts$/ s/.*/"amp;"/p' ) --quiet