Создание сценария продолжается при сбое команды - PullRequest
0 голосов
/ 24 апреля 2020

Я пишу скрипт для удаления ненужных файлов в моем $ HOME.

Мне нужно, чтобы скрипт продолжился, если команда в for-l oop возвращает ошибку. Я попытался последовать совету другого потока Stack Overflow, в котором говорилось, что он использует этот формат:

command || true

Однако, похоже, это не работает для моего сценария, где я выполняю код внутри a-l oop. Сценарий выходит из l oop и продолжает выполнение строк после l oop.

Сценарий:

#!/usr/bin/env bash

files=(
  "Desktop"
  ".yarnrc"
)

cd $HOME
for file in $files;
do
  echo "current file: $file"
  rm -r "$file" || :
done

echo "hello world"

Вывод:

current file: Desktop
rm: cannot remove 'Desktop': No such file or directory
hello world

1 Ответ

3 голосов
/ 24 апреля 2020

Проблема в том, что $file расширяет только до Desktop, а не на все элементы массива. $file эквивалентно ${file[0]}.

cd
for file in "${files[@]}"; do
  echo "current file: $file"
  rm -r -- "$file"
done

Вы не используете set -e, поэтому, будет ли rm успешным или нет, так как он не повлияет на остальную часть l oop или сценария .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...