Bash ';更多';来自后台线程的命令

Bash ';更多';来自后台线程的命令,bash,Bash,为什么“more”命令在主线程和后台线程上产生不同的输出? 请参见下面的示例: #!/bin/sh test_main() { more input.txt > output_main.txt } test_back() { more input.txt > output_back.txt } echo "abc" > input.txt test_back & test_main wait 输出_main.txt: abc output_back

为什么“more”命令在主线程和后台线程上产生不同的输出? 请参见下面的示例:

#!/bin/sh

test_main()
{
   more input.txt > output_main.txt
}

test_back()
{
   more input.txt > output_back.txt
}

echo "abc" > input.txt
test_back &
test_main
wait
输出_main.txt:

abc
output_back.txt:

::::::::::::::
input.txt
::::::::::::::
abc

more
的stdin必须连接到终端,以确定页面的行数。在后台运行
more
时,stdin不是终端,
more
以非交互模式运行

$ more input.txt </dev/tty
abc
$ more input.txt </dev/null
::::::::::::::
input.txt
::::::::::::::
abc

$more input.txt为什么要使用
more
?我不知道为什么,我怀疑答案是“通过设计”。但是,如果您需要在后台使用更多,可以这样使用:
(cat input.txt | more)>out.txt
,并保留与不在后台运行相同的功能。实际上,我没有能力更改脚本。此外,它可以在不同的环境中正常工作……您能否更详细地了解它可以在哪些环境中工作,哪些不工作?听起来这对于发现为什么AIX主机运行良好很重要,但在OracleLinux7.0(docker容器内部)和Windows“bash”功能内部,它有奇怪的行为描述。