将文件内容放在stdin上而不发送eof

时间:2012-12-29 23:12:24

标签: bash

将文件内容放在stdin上的典型方法如下:

./command.sh < myfile

这将myfile的所有内容放在stdin上,然后发送eof。我想在不添加EOF的情况下将内容放在stdin上。

对于各种交互式程序,我希望用一系列命令开始程序,但随后继续与程序交互。如果未发送eof,程序将等待更多输入,然后我可以交互式输入。

bash有可能吗?我目前的解决方案是将内容放在剪贴板上,然后粘贴它们。有没有更好的方法呢?

3 个答案:

答案 0 :(得分:3)

使用cat命令简单地将文件与stdin合并:

./command.sh < <(cat myfile -)

cat myfile - | ./command.sh

cat命令

cat代表 con cat enate

man cat
NAME
       cat - concatenate files and print on the standard output

SYNOPSIS
       cat [OPTION]... [FILE]...

DESCRIPTION
       Concatenate FILE(s), or standard input, to standard output.
...

(请 R ead T F ine M anual ;-)

你可以写

cat file1 file2 file3 ... fileN

以及

cat file1 - file2

cat - file1

cat file1 -

取决于您的需要......

答案 1 :(得分:2)

解决方法是使用

test -p /tmp/fifo || mkfifo /tmp/fifo

while true; do
    read line < /tmp/fifo
    echo "$line"
    [[ $line == break ]] && $line
done

并提供fifo

echo foobar > /tmp/fifo

停止“倾听”:

echo break > /tmp/fifo

请参阅man mkfifo

答案 2 :(得分:2)

另一种方法是使用另一个脚本来提供输入:

inputer.sh

cat $1
while read line; do
  echo $line
done

Usage

sh inputer.sh input_file | sh your-script.sh