Shell-Script
循環中的基本名稱問題
我是 shell 腳本程式的新手,我正在嘗試執行一個讀取文本並執行它的 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
關於我做錯了什麼的任何見解?謝謝。
你在 . 周圍加上了單引號
'/home/rafaeldaddio/Documents/teste/*'
。這意味著它正在尋找一個名為*
inside的單個文件teste
。(我懷疑你有這樣的文件,或者這就是你想要的!)。這意味著您的
for
循環使用單個條目執行,並將該文件傳遞*
給 basename。然後,
out=$(basename $arqin)
擴展out=$(basename file1 file2 file3 ... fileN)
為 basename 的參數當然太多了。簡單的解決方案:將引號從 around中取出
/home/rafaeldaddio/Documents/teste/*
。