Я установил программное обеспечение на машину с 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 разделен концом файла (требуется `КОНЕЦ') синтаксическая ошибка: неожиданный конец файла
Кроме того, #!/bin/sh
шебанг не должен иметь отступ; первые два байта файла должны быть #
и !
, чтобы ядро распознало его как действительный шебанг.
Кстати, вы можете использовать массив для своего 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
Не могли бы вы объяснить, пожалуйста?
У меня есть более одного миллиона дополнительных_файлов для каждого из них, я хочу применить одну и ту же команду
Вы можете попробовать использовать мой пример ниже, просто поместите имена ваших файлов в массив и предоставьте команды функции
нет, это не решает проблему
Если ваш 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
Не поддавайтесь искушению опустить пробелы или точки с запятой в приведенной выше команде.
Конечное слово для heredoc не должно иметь начальных/конечных пробелов — «END» должно быть единственным символом в строке.