2016-03-01 58 views
1

我想从Windows计算机上的批处理脚本远程运行mac上的bash脚本。在Windows上我有这样的:使用PuTTy在Mac上运行远程bash脚本

@echo off 
echo bash /applications/snowflake/table-updater/test2.sh; exit>tmp_file 
putty -ssh [email protected]_machine -pw password -m tmp_file 

这里是远程计算机

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

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

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

在此先感谢

+0

听起来像你应该使用'plink'来代替。无论如何,退出是多余的。 – tripleee

+1

shebang说'sh',但你用'bash'运行脚本。这是无害的,但却是充满误解的源泉。选择一个或另一个。 – tripleee

+0

几乎不需要单个命令的远程服务器上的脚本文件,但如果它是需要经常运行的命令,可能会很方便。 – tripleee

回答

2

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

plink [email protected]_machine -pw password /Applications/snowflake/table-updater/test2.sh 

从您的意见看来,问题实际上是在您的脚本中,而不是您如何连接。如果您获得7za: command not found您的脚本正在成功执行,但由于PATH问题而失败。

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

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

这增强了标准PATH用,你显然已经安装7za位置。 (任何标准的安装将优先考虑,因为我们在年底PATH添加非标准目录 - 加在前面,如果你想相反的行为)

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

+0

如果这不能完全解决您的问题,请考虑是否应该用其他/更好的详细信息发布新问题,或者您是否可以编辑当前问题,而不必过于忽视与该答案相关的问题。 – tripleee

+0

非常感谢这个,我追加PATH,并将7za的位置设置为我的脚本中的变量,并且它一切正常。 – Eggfoot

相关问题