Raf*_*ael 2 shell-script filenames quoting wildcards basename
我是 shell 脚本编程的新手,我正在尝试执行一个软件来读取文本并执行它的 POS 标记。它需要一个输入和一个输出,如执行示例所示:
$ cat input.txt | /path/to/tagger/run-Tagger.sh > output.txt
Run Code Online (Sandbox Code Playgroud)
我想要做的是不仅为文本执行此行,还为特定文件夹中的一组文本执行此行,并返回与输入文件同名的输出文件。所以,我试着做这个脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
我只用一个文件尝试过,它可以工作,但是当我尝试使用多个文件时,出现此错误:
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
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何见解?谢谢。
你在'/home/rafaeldaddio/Documents/teste/*'.周围加上了单引号。这意味着它正在寻找名为*inside的单个文件teste。(我怀疑您是否有这样的文件,或者这就是您的意图!)。
这意味着您的for循环使用单个条目运行,并将该文件传递*给 basename。
然后,out=$(basename $arqin)扩展到out=$(basename file1 file2 file3 ... fileN)当然是 basename 的参数太多。
简单的解决方案:将引号从/home/rafaeldaddio/Documents/teste/*.