运行 使用 PuTTy 在 Mac 上的远程 bash 脚本

Run a remote bash script on a Mac using PuTTy

我想从 windows machine 上的批处理脚本远程 运行 mac 上的 bash 脚本。在 Windows 我有这个:

@echo off
echo bash /applications/snowflake/table-updater/test2.sh; exit>tmp_file
putty -ssh User@remote_machine -pw password -m tmp_file

这里是遥控器上的 test2.sh machine

#!/bin/bash
#  test2.sh
#
#
7za x table-apps.zip -y -o/Applications/snowflake/applications

当批处理文件 运行 成功登录时,但由于某种原因无法 运行 bash 文件。然而,bash 文件 运行 在 mac 终端上运行良好,它可以完美地解压缩文件。这里会发生什么?

请注意 test2.sh 实际上在批处理文件中指定的 Applications/snowflake/table-updater 中。而且 tmp 文件也写得很好。我的目标是有一个脚本来访问另外 10 个具有相同目录结构的远程 machines。

提前致谢

类似于 PuTTy 套件中可编写脚本的 Unix 命令 ssh 的标准程序称为 plink,可能是此处推荐的工具。 putty 程序添加了一个实质性的终端仿真层,这对于非交互式脚本(终端绘图 windows、管理它们的布局、光标寻址、字体等)来说是不必要的,并且它缺少指定命令的简单功能直接作为参数。

plink user@remote_machine -pw password /Applications/snowflake/table-updater/test2.sh

从您的评论来看,问题实际上出在您的脚本中,而不是您的连接方式。如果您得到 7za: command not found,您的脚本已成功执行,但由于 PATH 问题而失败。

在提示符下,您执行的任何命令都会收到您的交互环境的副本。如果一个自给自足的脚本需要来自非标准位置的资源,它应该注意为自己设置环境。在您的情况下,我会在 7za 调用之前添加以下内容:

PATH=$PATH:/Applications/snowflake/table-updater

它在标准 PATH 的基础上增加了您显然已安装 7za 的位置。 (任何标准安装都将优先,因为我们在 PATHend 添加非标准目录——如果您想要相反的行为,请添加在前面。)

在一般情况下,如果您的交互式 .bashrc(或类似的 shell 启动文件)中有其他设置需要设置才能使脚本运行,脚本需要以一种或另一种方式进行设置。对于故障排除,一个快速而肮脏的修复方法是在脚本顶部添加 . /Users/you/.bashrc(其中 /Users/you 显然应该替换为您的主目录的真实路径);但是为了正常运行,脚本本身应该包含它需要的代码,并且不能依赖于单个用户的个人设置文件(无论如何都可以更改,恕不另行通知)。