Linux POSIX兼容的shell命令,用于读取带超时的协进程标准输出

Linux POSIX兼容的shell命令,用于读取带超时的协进程标准输出,linux,shell,unix,posix,aix,Linux,Shell,Unix,Posix,Aix,我有一个简单的程序,我把cmds读传给另一个协进程shell,读标准输出并显示它,需要读-t(超时),否则循环会在读中卡住,等待其他进程将输出发送到标准输出,但是问题是read-t不是POSIX兼容的,在AIX或Solaris上不工作,有没有其他方法可以让它工作,从而在所有POSIX兼容的平台上工作?此解决方案适用于从终端读取数据,但不适用于从协同处理,不确定如何适应这种情况 #!/bin/ksh ksh |& while read INPUT do echo $INPUT prin

我有一个简单的程序,我把cmds读传给另一个协进程shell,读标准输出并显示它,需要读-t(超时),否则循环会在读中卡住,等待其他进程将输出发送到标准输出,但是问题是read-t不是POSIX兼容的,在AIX或Solaris上不工作,有没有其他方法可以让它工作,从而在所有POSIX兼容的平台上工作?此解决方案适用于从终端读取数据,但不适用于从协同处理,不确定如何适应这种情况

#!/bin/ksh
ksh |&
while read INPUT
do
 echo $INPUT
 print -p "$INPUT"
 while read -t 1 -p OUT
        do
                case $OUT in
                        $)
                                break ;;
                        *)
                                echo "${OUT}" ;;
                esac
        done
done

每个循环必须使用
1个文件描述符。不能让嵌套的
read
语句同时从
stdin
读取(即
fd0
)。本网站上有从2个文件描述符读取的示例。您需要将一个文件重定向到另一个文件描述符,然后使用
read-u#
,其中
#
是新的文件描述符编号。您可以使用
3将
stdin
0
)的第二个实例分配给
3
3不确定我是否理解任何示例代码会有帮助,例如我不明白您的问题。您的脚本不使用POSIX shell
/bin/sh
-它使用
/bin/ksh
。照此看来,它已经需要
ksh
,一个非POSIX外壳。继续使用特定的
ksh
功能,只需说明您的应用程序需要
ksh
。实际上,每个商用*nix系统(包括AIX)都预装了
ksh
。在Linux系统上,它通常只需要一个命令,每个循环必须使用
1个文件描述符。不能让嵌套的
read
语句同时从
stdin
读取(即
fd0
)。本网站上有从2个文件描述符读取的示例。您需要将一个文件重定向到另一个文件描述符,然后使用
read-u#
,其中
#
是新的文件描述符编号。您可以使用
3将
stdin
0
)的第二个实例分配给
3
3不确定我是否理解任何示例代码会有帮助,例如我不明白您的问题。您的脚本不使用POSIX shell
/bin/sh
-它使用
/bin/ksh
。照此看来,它已经需要
ksh
,一个非POSIX外壳。继续使用特定的
ksh
功能,只需说明您的应用程序需要
ksh
。实际上,每个商用*nix系统(包括AIX)都预装了
ksh
。在Linux系统上,它通常只需要一个命令。