关于如何在linux中与另一个shell交互使用shell的一些问题


Some questions regarding how to use a shell interactively with another shell in linux

这篇文章是关于一些自动化任务的,也是为了满足我的好奇心。

这种情况可能发生吗?有人能提供一些实用的建议吗?

运行shell脚本

shell_exec(bash script);

Bash脚本类似:

  • 运行shell
  • 读取用于输入的文件
  • 将输入传递给shell
  • 从shell获取结果
  • 写入另一个文件以进行输出
  • 保持无限循环

将输入命令写入文件,例如:

  • 等待几秒钟
  • 读取结果的输出文件
  • 根据输出,将新的输入命令写入文件
  • 循环继续

我将留下一个无耻的链接,链接到我演示如何做到这一点的帖子,"expect in php":http://codehackit.blogspot.be/2012/04/automating-command-line-scripts-in-php.html

基本上,它只是proc_open()的一个包装器,它返回用于写入和读取另一个进程stdin/stdout的FD。http://php.net/manual/en/function.proc-open.php

为了避免部分读取和写入的问题(由于io缓冲和争用),您可能需要考虑使用一个目录,例如:

  1. 在目录中使用"临时"名称创建命令文件(例如"cmd_`date+%s`.txt.tmp")
  2. 当您完成对给定命令文件的写入后,关闭它(以刷新缓冲区),然后重命名它以删除".tmp"。重命名在文件系统中是原子的
  3. 让使用bash"daemon"的用户只查看"cmd_*.txt"(而不是.tmp),当使用给定的命令完成时,删除cmd文件或将其重命名为".done"后缀。(如果您需要多个并行工作进程守护程序,您甚至可以在处理cmd时将其重命名为".producing"以"claim"。只需确保在执行此操作时检查重命名的返回代码,看看是否有其他工作进程超过您。)

对输出文件执行同样的操作。