Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在.bat中通过Plink编写的脚本表现不同_Batch File_Ubuntu_Ssh_Putty_Plink - Fatal编程技术网

Batch file 在.bat中通过Plink编写的脚本表现不同

Batch file 在.bat中通过Plink编写的脚本表现不同,batch-file,ubuntu,ssh,putty,plink,Batch File,Ubuntu,Ssh,Putty,Plink,我的Windows计算机上有一个.bat文件。此.bat文件使用plink.exe连接到Ubuntu机器并执行.sh脚本。但是,根据Plink的使用方式,我会在脚本上看到不同的行为: 直接(亲自)登录Ubuntu--脚本成功 通过Bitvise客户端执行ssh--脚本成功 通过Plink进行ssh(通过调用Plink.exe)并从交互式shell调用脚本(它是windowscmd.exe中的Ubuntu shell)脚本成功 ssh通过.bat调用Plink--脚本失败 脚本失败,并显示以下消息

我的Windows计算机上有一个
.bat
文件。此
.bat
文件使用
plink.exe
连接到Ubuntu机器并执行
.sh
脚本。但是,根据Plink的使用方式,我会在脚本上看到不同的行为:

  • 直接(亲自)登录Ubuntu--脚本成功

  • 通过Bitvise客户端执行ssh--脚本成功

  • 通过Plink进行ssh(通过调用
    Plink.exe
    )并从交互式shell调用脚本(它是windows
    cmd.exe
    中的Ubuntu shell)脚本成功

  • ssh通过
    .bat
    调用Plink--脚本失败

  • 脚本失败,并显示以下消息:

    加载共享库时出错:libCint.so:无法打开共享对象文件:没有这样的文件或目录

    其他帖子似乎提到了
    libCint的安装/权限问题。因此
    但我知道情况并非如此,因为脚本在上述其他实例中工作正常

    下面是我的
    .bat
    文件中的
    plink.exe
    行:

    plink.exe !plink_ssh_details! myscript
    

    通过
    .bat
    文件以这种方式调用上述脚本时失败;再次注意,当直接从Ubuntu调用时,或者当I-ssh通过
    cmd.exe
    (使用
    plink.exe
    )或Bitvise客户端直接进入Ubuntu时,它会成功。任何帮助都将不胜感激。

    在其他情况下,您使用的是交互式会话

    当您在其命令行上指定命令时,Plink默认使用非交互式会话

    您的脚本可能依赖于特定设置的某些环境变量(如
    PATH

    这些变量很可能只为交互式会话设置。可能是因为它们在仅为交互式会话执行(源代码)的启动脚本中被修改

    解决办法是:

    • 更正启动脚本以无条件修改变量(即使对于非交互式会话)

    • 修改脚本,使其不依赖于环境变量

      或者,您可以为配置文件脚本提供源代码,请参阅

    • 使用
      -t
      开关强制Plink使用交互式会话

      这不是一个推荐的解决方案,因为使用交互式会话自动执行命令可能会带来严重的副作用。例如,见



    当使用“exec”通道执行命令时,一些更模糊的SSH服务器也可能表现出不同的行为。请参阅。

    我必须找到解决此问题的方法。在我从.bat文件调用的bash脚本的头部添加“-i”选项实现了以下目的:

    #!/bin/bash -i
    
    请注意,使用此选项时,会出现一些不必要的副作用警告(未提及细节)。但是,从远程ssh会话调用这个现在的交互式脚本(例如,从Windows.bat文件使用plink.exe并将内联命令传递到Unix框时)可以解决任何有关文件/目录可见性和权限问题的问题


    plink用户注意:如果您通过plink在Unix上调用脚本,并注意到脚本的行为不符合预期……添加“-i”可能有助于调试/解决您的问题。再次请注意,有些人声称这种黑客行为有不必要的副作用,他们/我对此一无所知。

    我问题的链接中提到了副作用(但只有一些提到,一系列可能的问题是无限的)。甚至很明显,“交互式”会话(-i)不应用于自动化任务。Martin--不确定您指的是哪个链接。到目前为止,我还没有看到任何副作用。你能澄清一下包含在.sh脚本头中包含-i的副作用的链接吗?我的答案中只有一个链接。它描述了许多可能的副作用中的两种(输出中的ANSI序列和输出中的命令提示符)。