我目前有一堆安装程序脚本,它们将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我相信。
我是如何实现这一目标的?
由于
答案 0 :(得分:0)
为什么不添加回声" \ n \ n"'安装完成后#34;线?当然,你的日志文件中还有两行,但那些似乎相对无害。
我相信你必须返回两次,因为tee是如何实现的。它"使用"一个人自己回来,另外两个来自“阅读”。调用(好吧,一个读取,一个函数,请求问题)。