(Bash) Как подставить много файлов в скрипт?
У меня есть скрипт, который принимает один аргумент ($1). Поэтому я запускаю его так: bash script.sh file1.txt. Но когда я хочу заменить больше файлов (bash script.sh *), он берет только один файл из всех. Как я могу заставить это работать? Должен ли быть другой скрипт, который подставляет все файлы из папки как $ 1 в script.sh или есть более простой способ?
#!/bin/bash
sed -i '/^$/d' $@
declare -a command
while read -r line
do
[[ "$line" =~ ^secretcommand$ ]] || continue
read -r cmd || break
eval "$cmd"
break
done<"$@"
Это не работает с "$@".
Не могли бы вы мне помочь?
1 ответ
Решение
Цикл в вашем коде предназначен для итерации по всем строкам данного файла. Вам нужно добавить внешний цикл для перебора каждого файла.
#!/bin/bash
sed -i '/^$/d' "$@"
for file in "$@"
while read -r line
do
[[ "$line" =~ ^secretcommand$ ]] || continue
read -r cmd || break
eval "$cmd"
break
done<"$file"
done
Обратите внимание, что вам нужно заключать в кавычки "$@" всякий раз, когда вы хотите использовать его в качестве списка аргументов команды (например, ваш sed
команда выше).