我从 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”的文件,当然会失败。
该命令启动bash
Ubuntu 中的默认用户 shell,并告诉它执行(选项-c
)字符串“XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae”,因此它将像您在 CLI 中键入时一样被解释。
答案2
对我来说,我使用的是#!/bin/bash/
而不是#!/bin/bash
(/
末尾有一个额外的)。投诉非常相似,但说的是“子进程不是目录”。非常有帮助。