Bash:如何将stdin,stdout和stderr重定向到安装日志的日志文件

时间:2013-11-22 08:53:52

标签: bash shell unix io-redirection

我目前有一堆安装程序脚本,它们将stderr / stdout记录到一个运行良好的日志文件中,但我还需要将stdin重定向到同一日志文件的用户响应。安装脚本有时会在共享库(包含)中调用函数,这也可能会读取用户输入。我考虑过添加自定义读取函数,但这需要更改共享库,并想知道是否有办法从调用脚本执行此操作。

目前脚本与此类似:

#!/usr/bin/bash

. ./libInstall

INSTALL_LOG="./install.log"
( (

echo "INFO: Installing..."
# Run some arbitrary commands...
# Read some input...
read ANSWER1
read ANSWER2
# Call function in libInstall which will prompt the user...
funcWhichAsksAQuestion ANSWER3

echo "INFO: Installation Complete"

) 2>&1 ) | tee -a "${INSTALL_LOG}"

如果我更改“((”以反映下面的行,我可以将stdin从日志文件中删除:

cat - 2> / dev / null | tee -a $ {INSTALL_LOG} | ((

这可以工作但是一旦脚本结束就需要2次回车,大概是因为管道坏了。 它几乎就在那里,但我无需在最后按两次输入以返回shell提示符。

这些脚本必须相当便携才能在RHEL> = 5,AIX> = 5.1,Solaris> = 9上工作,最低bash版本为v2.05我相信。

我是如何实现这一目标的?

由于

1 个答案:

答案 0 :(得分:0)

为什么不添加回声" \ n \ n"'安装完成后#34;线?当然,你的日志文件中还有两行,但那些似乎相对无害。

我相信你必须返回两次,因为tee是如何实现的。它"使用"一个人自己回来,另外两个来自“阅读”。调用(好吧,一个读取,一个函数,请求问题)。