有没有一种“呼应”标准输出的方法,可以将标准输入重定向到程序(Unix)?

时间:2018-07-07 17:32:25

标签: linux unix redirect echo show

说我有一个程序,可以从控制台获取有关用户的信息。

$ ./program
Enter your name : Foo
Enter your phone number : Bar
Your name is Foo and phone number Bar.

现在,如果我不想手动输入“ Foo”和“ Bar”,而是想从文件中重定向输入...

inputfile.txt

Foo  
Bar

这就是输出的结果...

$ ./program < inputfile.txt
Enter your name : 
Enter your phone number : 
Your name is Foo and phone number Bar.

通过重定向,您看不到在冒号之后输入的内容。有没有办法使输入在控制台上可见(如第一个示例)?

Edit:这基本上是与该线程询问的相同的问题: https://unix.stackexchange.com/questions/228954/c-how-to-redirect-from-a-file-to-cin-and-display-as-if-user-typed-the-input

但是我只发现了有关更改程序和添加功能isatty的建议,但是有没有办法不更改现有程序?

2 个答案:

答案 0 :(得分:0)

这取决于您的程序。我找到了该程序的窍门

printf "%s : " "Enter your name"
read  name
printf "%s : " "Enter your phone number"
read  phone
echo "Your name is ${name} and phone number ${phone}"

您可以在这里使用

while read -r line; do
   sleep 1
   echo "${line}"
done < inputfile.txt | tee >(./program)

将程序更改为

后,此操作将失败
read -p "Enter your name : " name
read -p "Enter your phone number : " phone
echo "Your name is ${name} and phone number ${phone}"

因此您可以测试此解决方案并希望获得最佳解决方案。

答案 1 :(得分:0)

tee /dev/tty < inputfile.txt | program将回显文件的内容,但与您的提示不符。看起来像

$ tee /dev/tty < inputfile.txt | ./program
Foo
Bar
Enter your name : 
Enter your phone number : 
Your name is Foo and phone number Bar.

我认为没有一种方法可以使所有内容如您所愿。