2016-05-21 7 views
0

をループにしようとしたとき、私はこのスクリプトを持っている:あいまいなリダイレクトERRORファイル

#!/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 

ただし、$ 1をfile.txtに置き換えた場合、testScriptでうまくいきます。
$ 1を送信するファイル名として扱うにはどうすればよいですか? (file.txt)

+0

'PATH'は配列ではありません。 '$ {PATH [*]}'は '$ PATH'と同じように展開されます。 – chepner

答えて

1

$1スクリプトに引数を渡さなかったため定義されていません。その入力をリダイレクトしました。

while read line; do 
    ... 
done 

あなたが./testScript <./file.txt> output.txtを呼び出すと、あなたのwhileループがあり、標準入力から読み込みます:

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

か、いっそ、ちょうどあなたのスクリプトは標準入力から読み込ませて、スクリプトを呼び出すのいずれか./testScriptから継承され、./file.txtから読み取ります。

+0

こんにちは。それは確かにそれを解決しました。 './testScript.txt:行11:予期しないトークンの近くで構文エラーが発生しました./testScript.txt:行11:完了" "$ 1" '' – LamaEu

+0

これはおそらく問題を示しています'while'ループの中にコードを入れてください。 – chepner

+0

文字通りループ内には何もありません:) – LamaEu

1

< ./file.txt./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をとります。

関連する問題