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