【问题标题】:Bash Script from MATLAB来自 MATLAB 的 Bash 脚本
【发布时间】:2023-04-07 07:09:01
【问题描述】:

我有一个要在 MATLAB 中执行的 bash 脚本。我使用 system() 来执行它。但是,当它执行时,我得到了

docker: command not found

我正在使用脚本中的 docker 命令,并且已将其正确安装在我的计算机中。如果我使用从 MATLAB 中的 system() 调用运行的完全相同的命令从终端运行脚本,则它可以正常工作。在某种程度上,如果我只是从我的 MATLAB 函数(最后一行)中删除 bash 脚本执行调用并运行该函数,然后从终端运行脚本,那么一切正常。

例如这里是一个 MATLAB 函数:

function foo(container_id)
% Copies this file to the root of a docker container given by container_id
system(['./copy_foo.sh ' container_id])
end

这是 bash 脚本

#!/bin/bash

docker cp foo.m $1:/root

从终端运行它

./copy_foo.sh CONTAINER_ID

产生所需的结果。从命令窗口运行 Matlab 函数

foo('CONTAINER_ID')

产量:

docker: command not found

【问题讨论】:

  • 你能分享一个有问题的脚本的最小复制示例吗?
  • 并展示你如何使用system 命令
  • system 运行的 shell 可能使用不同的 PATH,请参阅“UNIX 提示和限制”here
  • 我根据您的要求编辑了问题。我怎样才能设置路径来完成这项工作?
  • docker 可执行文件似乎不在您使用 system() 调用时 Matlab 打开的子 shell 中的 $PATH 中。如果您在 bash 脚本中明确设置相同的 PATH(在您的 bash 终端中)怎么办?

标签: bash matlab docker


【解决方案1】:

MATLAB 在启动时会更改环境变量。特别是,LD_LIBRARY_PATHPATH 受到影响。有两种解决方案:

  1. 使用docker 可执行文件的显式路径。您的 Bash 脚本将包含 /path/to/docker cp foo.m $1:/root 行。

  2. 确保在运行脚本之前正确初始化环境。您的 MATLAB 脚本将包含 system(['bash --login -c ./copy_foo.sh ' container_id]) 行(或类似的东西,我还没有测试过......)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多