2015-08-19 2 views
4

Я пытаюсь прочитать полный стандартного ввода в переменную:Читать полный текст стандартного ввода до EOF, когда стандартный ввод происходит от `cat` Баш

script.sh

#/bin/bash 

input="" 
while read line 
do 
    echo "$line" 
    input="$input""\n""$line" 
done < /dev/stdin 



echo "$input" > /tmp/test 

Когда я бегу ls | ./script.sh или почти любой другой команд, он отлично работает.

Однако он не работает, когда я запускаю cat | ./script.sh, введите свое сообщение, а затем нажмите Ctrl-C, чтобы выйти из cat.

Любые идеи?

+3

Зачем использовать петлю? Вы не можете использовать 'IFS = read -r -d '' переменную'? – user000001

+4

Обычно контроллер-D настроен на отправку EOF с клавиатуры, а не на управление-C. –

+0

@ user000001: Я не знал об этом, спасибо – edi9999

ответ

5

Я бы прилипают к однострочника

input=$(cat) 

Конечно, Ctrl-D следует использовать сигнал конца файла.