1

У меня есть несколько каталогов в местоположении, абсолютный путь к этому местоположению хранится в PROJECT_HOME . Теперь я пытаюсь сделать следующее в сценарии:

TARGET_LIST="bin lib scripts deployment"
tar -czf project.tar.gz -C "$PROJECT_HOME" "$TARGET_LIST"

но tar дает мне следующее:

tar: bin lib scripts deployment: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors

Команда tar работает, если я подставляю значения TARGET_LIST (tar -czf project.tar.gz -C "$PROJECT_HOME" lib bin scripts deployment), но не работает, когда я использую переменную.

Что я делаю неправильно?

2 ответа2

1

Вы столкнулись с проблемой, описанной в BASH FAQ # 50. К счастью, это то же самое: использовать массив.

1

Помещая $TARGET_LIST между кавычками, вы определяете один аргумент с пробелами. tar ищет один файл / папку с именем «развертывание сценариев bin lib».

Попробуй с

tar -czf project.tar.gz -C $PROJECT_HOME $TARGET_LIST

без кавычек

РЕДАКТИРОВАТЬ Если у вас есть пробелы в именах файлов или каталогов, вам нужно использовать массивы (как предложено Игнасио)

пример

TARGET_LIST=(bin lib scripts deployment "a directory with spaces")
tar -czf project.tar.gz -C $PROJECT_HOME "${TARGET_LIST[@]}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .