2014-06-23 70 views
0

我是shell脚本编程的新手,我试图执行一个读取文本并执行POS标记的软件。它要求输入和输出,可以在执行例子可以看出:循环中basename的问题

$ 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”)' – Biffen

回答

3

你不想让身边的格局报价,并提供您的变量:

for arqin in /home/rafaeldaddio/Documents/teste/* 
do 
    out=$(basename "$arqin") 
    output=$path$out 
    "$program" <"$arqin" >"$output" 
done