tee命令无法按预期工作(带有读取和回显)

ss0*_*005 6 unix linux bash

脚本和输出如下:

脚本:

#!/bin/bash
#tee_with_read.sh
function tee_test()
{
    echo "***This should be printed first but it is not***"
    read -r -p "Enter input : "
    echo "You entered : $REPLY"
}
tee_test | tee -a logfile
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./tee_with_read.sh
Enter input : ***This should be printed first, but it is not***
"My Input"
You entered : "My Input"
Run Code Online (Sandbox Code Playgroud)

我正在尝试将输出附加到logfile.但是正如你在输出中所看到的那样,似乎第一次读取被剔除,然后是回声,这不是预期的.

我在Windows 10上使用Git Bash版本3.1.23.由于此版本中没有命名管道,我不能使用命名管道进行日志记录.

Eri*_*ouf 9

read -p正在写它的输出stderrecho写入stdout. stdout通常是缓冲而stderr不是,所以看到stderr之前出现的事情并不罕见stdout.

如果您愿意,echo也可以让您stderr去做,echo "string" >&2或者unbuffer如果您有可用的话,可以在命令或类似工具中运行它