“无法打开”/opt 文件

“无法打开”/opt 文件

这是我的第一篇帖子。我想问一下有什么办法可以解决我的问题。我使用的是 Ubuntu 12.04 LTS,我的目的是使用 OpenFoam CFD 软件。

我正在尝试执行一个名为 Allrun 的脚本,该脚本对应于一个教程。我正在使用这样的 sudo 命令。

sudo ./Allrun

然后它要求我输入密码,输入密码后,突然出现一条消息:

./Allrun: 5: .: Can't open /bin/tools/RunFunctions

该路径出现在脚本中的第 5 行,如下所示:

. $WM_PROJECT_DIR/bin/tools/RunFunctions

$WM_PROJECT_DIR 是 opt/openfoam22/etc/bashrc 中定义的变量,指向目录:

$WM_PROJECT_DIR= /opt/openfoam222

(这个 bashrc 同时来源于 ~/.bashrc 文件,并且我可以在终端中使用该变量,所以我认为它是正确来源的)

我还尝试使用 rwx 权限修改 RunFunctions 文件,并使用“ls -la”确认其权限已更改(确实已更改),但没有解决任何问题。

我是 Linux 新手,任何帮助都将非常有帮助,提前感谢。

答案1

似乎在执行时,变量未定义;脚本搜索文件/bin/tools/RunFunctions/,而不是/opt/openfoam222/bin/tools/RunFunctions

请注意非交互式 shell 默认不加载 .bashrc,因此在交互中使用变量时定义变量这一事实并不是证据。即使您从 shell 运行脚本,默认情况下变量也不会导出到子 shell,需要声明它们export才能执行此操作。

尝试添加如下行

echo "DEBUG variable is $WM_PROJECT_DIR"

在 ./Allrun 中失败的行之前检查输出。如​​果这是问题所在,您应该在脚本中明确引用该文件。或者添加一个

export WM_PROJECT_DIR 

将其传递给子 shell。

添加(注释后)。请注意,您不应该.bashrc在您的代码中明确引用您的代码.profile(它们具有不同的含义,并且 shell 在不同场合引用它们,例如参见此处

脚本(非交互式)永远不应依赖您的登录 shell 来运行。如果它们需要特定的文件/定义,则应source明确指定它们。据您所知,它甚至可以从不同类型的 shell 或根本没有 shell 来调用。

相关内容