2016-06-16 2 views
1

Как я могу поймать ввод из сценария оболочки, который вызывается с помощью трубы, без риска кошки, ожидающей ввода навсегда?Shell: Поймайте пользовательский ввод с cat

echo "hello world" | mysript.sh 

В сценарии я пытаюсь извлечь вход с:

input=$(cat) 

Но в некоторых случаях cat команда вызывает весь сценарий на тайм-аут, потому что он ожидает ввода.

+1

Вы хотите поймать ввод, но вы не хотите ждать ввода? –

+2

Вход должен заканчиваться EOF = ctrl + D. –

+0

Рассмотрите возможность использования 'read' в вашем скрипте. Вы можете читать строки за строкой, и ваша оболочка может поддерживать дополнительные инструменты, такие как таймауты и односимвольные чтения. – ghoti

ответ

0

Предположим, вы хотите, чтобы обрабатывать данные из трубы в сценарии оболочки, попробуйте:

В сценарии:

read LINE 
echo $LINE 

В командной строке:

echo "hello world" | ./mysript.sh 

В этом случае hello world будет читать в LINE.

+0

Попробуйте что-нибудь, что содержит шаблон глобуса, например, ''/etc/* '" (т. Е. Двойная кавычка '$ LINE'). – Kusalananda

Смежные вопросы