【问题标题】:shell script running by sensing a file通过感知文件运行的 shell 脚本
【发布时间】:2010-02-02 08:53:11
【问题描述】:

我正在研究 unix。 我想编写一个 shell 脚本来检查 Windows 上名为“temp_file.txt”的文件 然后执行一些命令。 这可能吗?

我们如何连接到 windows 并转到特定目录并检查文件?

【问题讨论】:

  • 在同一系统上,还是在联网系统上?

标签: unix shell scripting


【解决方案1】:

使用“常规”Windows 文件共享工具在 Windows 机器上共享目录。在 Linux 方面,您有两种选择:

  1. 使用smbclient连接Windows机器,检查文​​件是否存在或

  2. 使用smbmount 将共享目录挂载到您的Linux 文件系统中,并使用“标准”Linux 命令(例如test)检查文件是否存在。

具体的实现细节取决于您使用的脚本语言,但您的伪代码将如下所示:

loop:
    check if file exists
    if yes: do something useful
    sleep for some reasonable time

(我假设你想在 Linux 机器上执行命令。)

【讨论】:

    【解决方案2】:

    如果您使用的是 Linux(您指定您使用的是 Unix,但不是什么变体),请查看 inotify API --- 这将允许您为文件系统事件设置事件响应器(更多比轮询更有效)。

    在 shell 脚本中,您可以使用 inofitywait 命令 --- 请参阅 http://linux.die.net/man/1/inotifywait 了解更多信息。

    【讨论】:

      【解决方案3】:

      您可以在 Windows 上设置 SSH,然后使用 SSH 客户端在 Unix 上编写脚本以连接到 Windows 并执行命令。如果您负担得起,另一种方法是编写一个 Windows 批处理,并在 Windows 本身上执行您的命令。或者您可以打开 Windows 终端服务,并使用 Unix 的 telnet 协议来发出命令。支持 telnet 的编程语言包括 Perl (Net::Telnet) 和 Python(telnetlib)

      【讨论】:

        【解决方案4】:

        正如 ghostdog74 建议的那样,ssh 是您最好的选择。你可以运行类似的东西(我假设你已经安装了 Cygwin 或 SFU)

        ssh "[ -e $file ] && do_something.sh" > do_something.log
        

        如果你的命令记录到标准输出,你的 Linux 机器上也会有日志。

        如果你设置了私钥认证,它会变得更好。

        【讨论】:

          猜你喜欢
          • 2011-07-27
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多