首先,我是 bash 脚本的新手。
好吧,我有一个 bash 脚本来开始创建环回服务器。它执行一些 bash 命令,然后运行“expect”,然后启动一个名为 wadm 的程序(expect 处理 wadm 提示的密码)。
这里有一个快速概述:
- 执行一些 bash 命令(提示输入用户名/密码)
- 计算一些东西
- 在 bash 中启动 expect shell
- expect 以特定用户名启动 wadm
- wadm 提示输入密码
- 期待输入密码
- expect 运行特定于 wadm 的 cmd
- 退出 wadm(期望向 wadm 发送“退出”)
- 退出期望(期望在 bash 脚本中结束)
- expect 以特定用户名启动 wadm
- 编辑上述 wadm 命令创建的一些文件
- 在 bash 中启动 expect shell
- expect 以特定用户名启动 wadm
- wadm 提示输入密码
- 期待输入密码
- expect 运行特定于 wadm 的 cmd(依赖于先前 wadm cmd 的不同 cmd)
- 退出 wadm(期望向 wadm 发送“退出”)
- 退出期望(期望在 bash 脚本中结束)
- expect 以特定用户名启动 wadm
我想做的是让 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/