linux - 在 bash 中使用多个 Shell 进行作业控制?

标签 linux bash

首先,我是 bash 脚本的新手。

好吧,我有一个 bash 脚本来开始创建环回服务器。它执行一些 bash 命令,然后运行“expect”,然后启动一个名为 wadm 的程序(expect 处理 wadm 提示的密码)。

这里有一个快速概述:

  • 执行一些 bash 命令(提示输入用户名/密码)
  • 计算一些东西
  • 在 bash 中启动 expect shell
    • expect 以特定用户名启动 wadm
      • wadm 提示输入密码
      • 期待输入密码
      • expect 运行特定于 wadm 的 cmd
      • 退出 wadm(期望向 wadm 发送“退出”)
    • 退出期望(期望在 bash 脚本中结束)
  • 编辑上述 wadm 命令创建的一些文件
  • 在 bash 中启动 expect shell
    • expect 以特定用户名启动 wadm
      • wadm 提示输入密码
      • 期待输入密码
      • expect 运行特定于 wadm 的 cmd(依赖于先前 wadm cmd 的不同 cmd)
      • 退出 wadm(期望向 wadm 发送“退出”)
    • 退出期望(期望在 bash 脚本中结束)

我想做的是让 expect 和 wadm 在后台运行(至于每次我需要在其中做某事时不启动/退出 wadm),同时我在 bash 中做一些其他事情。

作为 bash 脚本的新手(另外,我在 linux/unix 方面并不那么先进)我想过使用作业控制来解决这个问题,但根据这篇文章 (http://stackoverflow.com/questions/690266/为什么我不能在 bash 脚本中使用作业控制) 工作控制可能不是要走的路。这种流程还有哪些其他选择?

最佳答案

创建两个命名管道:

mkfifo wadm_stdin
mkfifo wadm_stdout

在后台启动 wadm:

wadm <wadm_stdin >wadm_stdout &
wadm_id=$!

使用 expect 编写所需次数的脚本(不要忘记第一次登录并从末尾删除退出)

expect ... <wadm_stdout >wadm_stdin

完成 wadm 后,等待它退出:

cat wadm_stdout >/dev/null &  # Read any output to prevent blocking on a full pipe
echo quit >wadm_stdin
wait $wadm_id

关于linux - 在 bash 中使用多个 Shell 进行作业控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205252/

相关文章:

linux - sed 命令如何与多个组一起使用

bash - 删除第一列包含小写字母的行

linux - Ansible 和有条件的软件安装

linux - 将 cat 输出作为变量进行比较

c++ - 套接字和文件推荐的缓冲区大小

macos - 非常简单的 OSX bash 脚本 : echo gives no output

linux - 用于检查文件中连续模式的脚本

linux - Bash 列相关平均值

linux - 数据通过 TCP/IP 堆栈的传输时间 (Linux)

linux - SIGKILL 之前的时间