2016-05-21 123 views
0

我有這樣的腳本:曖昧重定向錯誤

#!/bin/bash 

PATH=${PATH[*]}:. 
#filename: testScript 

while read line; do 
    #. 
    #. 
    #. 

done < "$1" 

而這個文本文件(稱爲file.txt的):

I am a proud sentence. 

當我做:

chmod +x ./testScript.txt 

./testScript.txt <./file.txt> output.txt 

我得到這個:

./testScript.txt: line 11: $1: ambiguous redirect 

但是,如果我用file.txt代替$ 1代替testScript,它就可以正常工作。
我如何讓它將$ 1作爲我發送的文件名? (file.txt)

+0

'PATH'不是一個數組; '$ {PATH [*]}'和'$ PATH'一樣展開。 – chepner

回答

1

$1未定義,因爲您尚未將參數傳遞給腳本;你已經重定向了它的輸入。無論是打電話給你的腳本

./testscript.txt ./file.txt > output.txt 

,或者更好的,只是讓從標準輸入讀取你的腳本:

while read line; do 
    ... 
done 

當你調用./testScript <./file.txt> output.txt,你while循環會從標準輸入,這是閱讀從./testScript繼承,其從./file.txt讀取。

+0

嗨。這確實解決了它。雖然,當我說你說的時候,我得到:'./testScript.txt:第11行:語法錯誤附近出現意外的令牌./testScript.txt:第11行:done <「$ 1」'' – LamaEu

+0

這可能表明問題用'while'循環內的代碼。 – chepner

+0

循環內幾乎沒有:) – LamaEu

1

用替換< ./file.txt

+0

它現在給我: './testScript.txt:第11行:在意外標記'done'附近出現語法錯誤' './testScript.txt:第11行:'done <「$ 1」'' – LamaEu

+0

將腳本粘貼到那裏:http://www.shellcheck.net/ – Cyrus

1

修改你的while循環其次,

while read line; do 
. 
. 
. 
done < "${1:-/dev/stdin}" 

${1:-...}需要$1如果它的定義,否則使用自己的進程的標準輸入的文件名。