Shell-Script

循環中的基本名稱問題

  • June 23, 2014

我是 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/*

引用自:https://unix.stackexchange.com/questions/138755