Проблемы с базовым именем в цикле

#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