(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 команда выше).

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