#shell #for-loop
#оболочка #для цикла
Вопрос:
Я новичок в программировании сценариев оболочки, и я пытаюсь запустить программное обеспечение, которое считывает текст и выполняет его пометку POS. Для этого требуется ввод и вывод, как видно из примера выполнения:
$ cat input.txt | /path/to/tagger/run-Tagger.sh > output.txt
Что я пытаюсь сделать, так это выполнить эту строку не только для текста, но и для набора текстов в определенной папке и вернуть выходные файлы с тем же именем, что и входные файлы. Итак, я попытался выполнить этот скрипт:
#!/bin/bash
path="/home/rafaeldaddio/Documents/"
program="/home/rafaeldaddio/Documents/LX-Tagger/POSTagger/Tagger/run-Tagger.sh"
for arqin in '/home/rafaeldaddio/Documents/teste/*'
do
out=$(basename $arqin)
output=$path$out
cat $arqin | $program > $output
done
Я попробовал это только с одним файлом, и это работает, но когда я пытаюсь использовать более одного, я получаю эту ошибку:
basename: extra operand ‘/home/rafaeldaddio/Documents/teste/3’
Try 'basename --help' for more information.
./scriptLXTagger.sh: 12: ./scriptLXTagger.sh: cannot create /home/rafaeldaddio/Documents/: Is a directory
Есть идеи о том, что я делаю неправильно? Спасибо.
Комментарии:
1. Какое значение
$arqin
перед вызовомbasename
? И вам, вероятно, следует указать свои переменные, например:$(basename "$arqin")
Ответ №1:
Вы не хотите заключать шаблон в кавычки и заключать свои переменные в кавычки:
for arqin in /home/rafaeldaddio/Documents/teste/*
do
out=$(basename "$arqin")
output=$path$out
"$program" <"$arqin" >"$output"
done