尝试循环文件时,模糊重定向错误

时间:2016-05-21 14:35:42

标签: bash shell unix

我有这个脚本:

#!/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中使用testScript替换$ 1,那就可以了。
如何将$ 1作为我发送的文件名? (file.txt的)

3 个答案:

答案 0 :(得分:1)

< ./file.txt替换为./file.txt

答案 1 :(得分:1)

$1未定义,因为您尚未向您的脚本传递参数;您已重定向其输入。将您的脚本调用为

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

或者,更好的是,让您的脚本从标准输入中读取:

while read line; do
    ...
done

当您致电./testScript < ./file.txt > output.txt时,您的while循环将从其标准输入读取,该输入继承自./testScript./file.txt

答案 2 :(得分:1)

修改你的while循环,

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

${1:-...}如果定义了$1,则使用自己进程的标准输入的文件名。