csh脚本找不到可执行文件

时间:2011-11-10 22:41:10

标签: shell executable csh

对于当前项目,我需要运行GENESIS遗传算法程序,教授提供了一个csh脚本,允许我们轻松传递适应度函数以及外部启动和模板文件。

脚本调用makefile来构建可执行文件,将mix函数添加到mix中并生成可执行文件ga.FIT,其中FIT是finess函数源文件的名称。

在学校运行Ubuntu 10.04的机器上,运行此脚本没有任何问题。但是,当我尝试在我的机器上运行它时,我得到以下输出:

./go cancer2 ex0
Note: Genesis files modified for use on USM Linux cluster
Note2: ga.cancer2 is your executable (e.g., if you need to use the debugger)
making executables ...
make: `ga.cancer2' is up to date.
make: `report' is up to date.
running ga.cancer2 ex0 ...
ga.cancer2: Command not found.

但可执行文件在那里!我可以通过ga.cancer2 ex0单独手动调用它,它会在csh和bash提示下运行。我已经验证了它不是权限问题,因为已将chmod 755的等效项设置为可执行文件。

这是针对csh的特定内容吗?我应该考虑修改bash的脚本,还是坚持远程学习到学校系统?

2 个答案:

答案 0 :(得分:2)

也许您需要将.添加到$PATH

一旦你参加考试,请告诉你的教授关于着名的C-shell considered harmful论文,并建议他阅读Wikipedia "Considered Harmful"页。

答案 1 :(得分:1)

看起来ga.cancer2位于您当前的目录中。 Basile的答案应该有效,但修改脚本可能更好,因此它会调用./ga.cancer2而不是ga.cancer2

通常,在.中使用$PATH是一种潜在的安全风险(无论您使用哪种外壳)。想象一下cd进入一个目录,在这个目录中有人种下了ls命令,它做了一件坏事。如果您确保.不在$PATH中(并养成在当前目录中输入./command来执行命令的习惯),则可以避免此风险。

. end $PATH风险较小 - 但由于测试程序的最常见名称是test,{{ 1}}会调用test/bin/test习惯仍然很好。

Basile有一个很好的观点,./command不是编写脚本的最佳shell - 但从输出的外观来看,你运行的脚本可能很简单,但它并不是很有用区别。好的习惯和所有这些。