Bash ';更多';来自后台线程的命令
为什么“more”命令在主线程和后台线程上产生不同的输出? 请参见下面的示例: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
#!/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”功能内部,它有奇怪的行为描述。