.bat 中通过 Plink 的脚本行为不同

问题描述 投票:0回答:2

我的 Windows 计算机上有一个

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

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

  2. 通过 Bitvise 客户端进行 ssh -- 脚本成功

  3. 通过 Plink ssh(通过调用

    plink.exe
    )并从交互式 shell 调用脚本(它是 Windows 中的 Ubuntu shell
    cmd.exe
    )——脚本成功

  4. 通过

    .bat
    进行 ssh,然后调用 Plink -- 脚本失败

脚本失败并显示消息:

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

其他帖子似乎提到了

libCint.so
的安装/权限问题,但我知道情况并非如此,因为脚本在其他实例中可以正常工作,如上所示。

下面是我的

plink.exe
文件中的
.bat
行:

plink.exe !plink_ssh_details! myscript

通过

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

batch-file ubuntu ssh putty plink
2个回答
1
投票

在其他情况下,您正在使用交互式会话。

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

您的脚本可能依赖于一些专门设置的环境变量(如

PATH
)。或者可能定义一个别名。

很可能仅为交互式会话设置变量/别名。可能是因为它们在仅针对交互式会话执行(来源)的启动脚本中进行了修改。

解决方案是:


当使用“exec”通道执行命令时,一些更不起眼的 SSH 服务器也可能表现不同。请参阅在 Plink 命令行上执行命令失败并显示“未找到”


0
投票

我必须想出一个解决方案来解决这个问题。在我从 .bat 文件调用的 bash 脚本的标题中添加“-i”选项就达到了目的:

#!/bin/bash -i

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

plink 用户请注意:如果您通过 plink 在 Unix 上调用脚本并注意到该脚本的行为不符合预期...添加“-i”可能有助于调试/解决您的问题。再次请注意,有些人声称这种黑客攻击会带来不必要的副作用,但他们/我并没有意识到。

© www.soinside.com 2019 - 2024. All rights reserved.