2017-10-29 220 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)。 –