Как запустить команду для многих файлов

Я установил программное обеспечение на машину с Linux, и оно доступно через командную строку.

Команда mkrun, и когда я ввожу mkrun в терминале, он спрашивает 4 user inputs как

run_type
run_mode
mode_type
cat additional_file #additional_file is .txt file

Я хочу использовать команду mkrun для многих файлов каталога. Однако для одного файла я могу запустить программу, выполнив

mkrun << END
$run_type
$run_mode
$mod_type
$(cat $additional_file)
END

Но когда я пытаюсь использовать одну и ту же команду для многих файлов, включив ее в цикл, она не работает.

    #!/bin/sh
    run_type=4
    run_mode=2
    mod_type=3
    for additional_file in *.txt
    do
      mkrun << END
      $run_type
      $run_mode
      $mod_type
      $(cat $additional_file)
    END
    done

Думаю проблема с END. может ли кто-нибудь предложить мне лучшее решение для того же самого.

Ошибка: предупреждение: здесь-документ в строке 12 разделен концом файла (требуется `КОНЕЦ') синтаксическая ошибка: неожиданный конец файла

Конечное слово для heredoc не должно иметь начальных/конечных пробелов — «END» должно быть единственным символом в строке.

glenn jackman 24.01.2023 17:04

Кроме того, #!/bin/shшебанг не должен иметь отступ; первые два байта файла должны быть # и !, чтобы ядро ​​​​распознало его как действительный шебанг.

tripleee 26.01.2023 06:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Кстати, вы можете использовать массив для своего additional_file, чтобы начать

Также вы можете предоставить функцию с вашими командами.

Пример с массивом:

#!/bin/sh

# Array
additional_files=('File_1' 'File_2' 'File_3')

# Function
commands(){
    command_1
    command_2
    command_3
    command_4
}

for file in ${additional_files[@]}; do
    commands                      
done

Не могли бы вы объяснить, пожалуйста?

macder 24.01.2023 14:14

У меня есть более одного миллиона дополнительных_файлов для каждого из них, я хочу применить одну и ту же команду

pro 24.01.2023 14:15

Вы можете попробовать использовать мой пример ниже, просто поместите имена ваших файлов в массив и предоставьте команды функции

macder 24.01.2023 14:20

нет, это не решает проблему

pro 24.01.2023 14:25
Ответ принят как подходящий

Если ваш heredoc имеет отступ, вы можете добавить тире в качестве опции, подобной этой, и она будет подавлять начальные символы TAB (но не пробелы):

  mkrun <<-END
  TAB$run_type
  TAB$run_mode
  TAB$mod_type
  TAB$(cat $additional_file)
END

Вы также можете попробовать:

{ echo $run_type; echo $run_mode; echo $mod_type; cat "$additional_file"; } | mkrun

Не поддавайтесь искушению опустить пробелы или точки с запятой в приведенной выше команде.

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