使用PuTTy

时间:2016-03-01 12:55:26

标签: bash batch-file remote-access putty

我想从Windows机器上的批处理脚本远程运行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

#!/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台远程机器。

提前致谢

1 个答案:

答案 0 :(得分:2)

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

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的位置相加。 (任何标准安装都将优先,因为我们在PATH end 添加非标准目录 - 如果您想要相反的行为,请在前面添加。)

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