问题:

问题:

我从 10.04 版开始使用 Ubuntu,发现它比 Windows 更友好。现在我使用的是“Precise 12.04”。我为 bash 脚本创建了许多自定义启动器,直到昨天才出现问题。

我安装了一个包含多个可执行文件的软件套件。主可执行文件abaqus位于 ,并且是中 \opt\softwaresname可执行文件的符号链接。abq610i/opt/softwaresname/executables/

主 exeabaqus需要一些命令行参数。我使用参数cae,(即abaqus cae),但使用另一个命令以更好的模式渲染图形,因此最终调用是: XLIB_SKIP_ARGB_VISUALS=1 abaqus cae

我在文件中为这个长命令创建了一个别名.bash_rc

alias abaquscae="XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"

一切都运行正常,因为别名运行了软件。作为一个懒人,我想为此创建一个 Cairo-dock 启动器。所以我abaquscae在框中输入了“单击时启动的命令”,并选中了“在终端中运行”。然而令我沮丧的是,单击启动器时它给出了一个错误:

There was an error creating the child process for this terminal
Failed to execute child process "abaquscae" (No such file or directory)

因此我编写了一个小型 bash 脚本文件“abaquscae.sh”:

#!/bin/sh
"XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"

并保存,使其可执行,在 bash shell 中运行它时我再次收到类似的错误,即:

./abaquscae.sh: 2: ./abaquscae.sh: XLIB_SKIP_ARGB_VISUALS=1 abaqus cae: not found 

现在我完全迷失了,我尝试了很多技巧,例如
1- 删除 bash 脚本中的逗号,
2- 制作它dos2unix
3- 使用可执行文件的完整路径
,但该脚本未通过 bash 终端运行。

问题:

该命令(及其别名)在 bash 终端中工作正常,但是当它们通过其他渠道(例如脚本/启动器)运行时,终端却无法识别它们 :( ..

如果有专家有关于如何解决此问题的建议/信息,请分享。我将不胜感激。

答案1

我认为脚本应该是这样的:

#!/bin/bash
XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae

您还可以使用以下命令创建启动器:

bash -c 'XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae'

在命令行中可执行文件名之前设置环境变量是 CLI(命令行界面)shell 的一项功能。如果您放入VARIABLE=value /path/to/executable启动器,则读取启动器(并有效启动可执行文件)的程序将尝试查找名为“VARIABLE=value”的文件,当然会失败。

该命令启动bashUbuntu 中的默认用户 shell,并告诉它执行(选项-c)字符串“XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae”,因此它将像您在 CLI 中键入时一样被解释。

答案2

对我来说,我使用的是#!/bin/bash/而不是#!/bin/bash/末尾有一个额外的)。投诉非常相似,但说的是“子进程不是目录”。非常有帮助。

相关内容