将文件内容放在stdin上的典型方法如下:
./command.sh < myfile
这将myfile的所有内容放在stdin上,然后发送eof。我想在不添加EOF的情况下将内容放在stdin上。
对于各种交互式程序,我希望用一系列命令开始程序,但随后继续与程序交互。如果未发送eof,程序将等待更多输入,然后我可以交互式输入。
bash有可能吗?我目前的解决方案是将内容放在剪贴板上,然后粘贴它们。有没有更好的方法呢?
答案 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)
解决方法是使用fifo。
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