【问题标题】:Bash - Remote LibraryBash - 远程库
【发布时间】:2017-10-31 23:12:58
【问题描述】:

我们是两个正在研究 Bash 工具箱的学生,但我们遇到了一个问题:

我们的本地脚本使用函数,存放在两个本地库中。

我们的脚本使用第一个库中的函数,最后使用第二个库中的函数。

脚本

我们不能将这两个库合二为一。

我们实际上是使用这个命令在远程计算机上运行我们的脚本:

ssh login@remoteIP bash < ~/script.sh

问题是:如何在脚本中设置库位置

【问题讨论】:

    标签: bash ssh scripting


    【解决方案1】:

    您需要使用. 命令来包含外部库。是的,该命令被简单地称为. - 一个文字点。在 library1.sh 顶部添加:

    . /path/to/library2.sh
    

    script.sh顶部添加:

    . /path/to/library1.sh
    

    我建议使用绝对路径,因为相对路径。如果您使用相对路径,则需要确保它们与您的 $PATH 条目之一相关,否则它们将与执行 script.sh 的当前文件夹相关。


    顺便说一句,还有source 命令与点命令完全一样。它们都是 bash 内置函数。

    输入 help .help source 以获取帮助。

    【讨论】:

    • 您也可以从脚本中获取两者。净效果将是相同的。无需修改现有的“库”。
    • 如果 library1 依赖于 library2,则源代码应该出现在 library1 中而不是 script.sh 中。此外,该库仍在开发中,为什么不改变它呢?
    • 一切都在本地工作,当我们在远程计算机上运行此脚本时出现问题:此脚本尝试使用存储在本地计算机上的函数,但无法“返回”到它;即使我们在source命令中指定了本地计算机的IP也不起作用
    • 当然您需要将库和脚本都复制到另一台计算机上。这不是很明显吗?
    • 我们无法在远程计算机上安装任何东西,这就是为什么一切都是通过 ssh 从带有 bash 脚本和 2 个库的计算机上完成的:/ 我们有一台带有脚本和2个库,和一台没有设置任何东西的远程机器,也不能设置任何东西
    【解决方案2】:

    使用 bashpp 在脚本中嵌入您的 Library# 代码。

    将您的. 调用替换为#include,然后通过bashpp 运行它:

    bashpp ~/script.sh | ssh login@remoteIP bash -s
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多