对于当前项目,我需要运行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的脚本,还是坚持远程学习到学校系统?
答案 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 - 但从输出的外观来看,你运行的脚本可能很简单,但它并不是很有用区别。好的习惯和所有这些。