在现有终端会话中运行 shell 脚本

在现有终端会话中运行 shell 脚本

我正在编写一个脚本,将项目部署到多台服务器(9 台,并且还在增加)。由于压缩、复制和远程连接,脚本的速度很快变得相当慢。所以现在我正在研究让脚本触发通过屏幕运行的帮助程序。伪代码中的理想工作流程如下:

deployment script
    accept user input for deployment parameters
    echo "deployment initiated"
    TTY=`tty`
    start helper 1 in detached screen, dumped to a temp file
    exit

helper 1
    export from SVN
    compress files
    upload to temporary directory on live servers
    swap old and new web directories on live servers
  * start helper 2 in $TTY
    exit

helper 2
    echo "deployment done"
    echo "do you want to view deployment log? [y/N]"
    take user input
    if yes
        output temp file
    delete temp file
    exit

除了标有 * 的命令外,其他一切都很简单。我可以将静态消息传送到write $TTY,但要获取用户输入,我需要在要显示该消息的终端外部执行 shell 脚本。有什么办法吗?

(顺便说一句,我在开发服务器上运行Centos。)

答案1

您可以使用以下命令启动连接到 TTY 的助手 2:

helper2.sh >$TTY 2>&1 <$TTY

将标准输入,标准输出和标准误差重定向到TTY。

不幸的是,这种方法存在问题:

  1. 一旦“部署脚本”退出,shell 将从 TTY 读取输入以获取用户的下一个命令。当 shell 和 helper2.sh 都尝试从 TTY 读取时,用户输入的位置是不可预测的。

  2. 如果用户在启动“部署脚本”后启动编辑器或其他命令,则助手 2 的输出将会污染其屏幕上的内容。

一些替代方法:

  • 完成帮助程序脚本的部署脚本wait,以防止 shell 与帮助程序 2 竞争用户输入
  • 让助手 2 直接通过电子邮件将日志发送给开发人员,而无需询问他们是否想查看

相关内容