2017-10-29 128 views
1

文件和标准输入我想知道如果读我可以写一个接受两个参数的shell脚本同时,一个从一个文件,从标准输入了一个又一个。你能举一些例子吗?从猛砸

我想

while read line 
    do 
    echo "$line" 
done < "${1}" < "{/dev/stdin}" 

但是,这是行不通的。

+0

什么是“从一个文件,从标准的说法”是什么意思?你的意思是读取作为参数传递的文件中的数据? – m0skit0

+1

交织含量(从文件的一行,一个来自标准输入,来回切换)?连接它们?更具体一点 - 我们*可能*有一个重复,一旦足够的细节给出。 –

回答

1

您可以使用cat -cat /dev/stdin

while read line; do 
    # your code 
done < <(cat "$1" -) 

while read line; do 
    # your code 
done < <(cat "$1" /dev/stdin) 

,或者,如果你想从通过命令行以及标准输入通过了所有文件的读取,你可以这样做:

while read line; do 
    # your code 
done < <(cat "[email protected]" /dev/stdin) 

参见:

+0

我需要bash脚本同时接受两个参数。我习惯第二个例子没有工作。我创建了test.txt,然后我使用bash myprogram.sh test.txt来做任何事情。但我只从文件中获得内容,而不是从标准输入(任何东西) – Juan

+0

@Juan什么是什么?你想'stdin'文字被推断为标准输入? – HuStmpHrrr

+0

已更新答案以照顾通过命令行传递的所有参数(文件名)。 – codeforester

0

This topic似乎是有帮助的位置:

{ cat $1; cat; } | while read line 
    do 
    echo "$line" 
done 

或者只是

cat $1 
cat 

如果你正在做的是打印的内容

+1

'猫'$ 1“',你的意思是。否则,具有空格的文件名将不可用。而你只需要cat'的'一个实例,作为标准输入可以作为'-'被称为如下:'猫“$ 1” -' –

+1

顺便说一句,我建议做'<<(猫“$ 1” - ) '而不是'猫'$ 1“ - |同时避免[BashFAQ#24](http://mywiki.wooledge.org/BashFAQ/024)。 –