2012-07-20 123 views
1

这是交易。我已经在Win7 envionment中安装了cygwin。这是事我会在命令行做的序列,一切工作,bash,可执行文件在命令行中运行,但不在脚本中

文件mpc.exe是英特尔Fortran编译器创建一个64位可执行

cp ./dir1/dir2/mpc.exe ./mpc.exe 
./mpc.exe arg1 arg2 

一切罚款

想为此创建一个脚本。原因是我会想要执行arg2的各种值的代码。文件 “script_mpc.sh” 包含以下

#!/bin/sh 
cp ./dir1/dir2/mpc.exe ./mpc.exe 
./mpc.exe arg1 arg2 
wait 
return_val=$? 
[ $retval -eq 0 ] && echo "successfully executed " 

现在回到在命令行中,

$>chmod +x script_mpc.sh 
$>./script_mpc.sh 

错误:

./script_mpc.sh: line 2: ./mpc.exe: No such file or directory 

一个非常新鲜的初学者。在旅途中学习shell命令和脚本。请帮忙。

+0

如果你真的希望这是一个bash脚本,你需要'#!/ bin/bash'在顶部,而不是'#!/ bin/sh'但是我不知道这是否是你的问题,因为你的文件以'.sh'命名,所以在这个问题中你可能不是指bash。 – Almo 2012-07-20 19:22:35

+0

脚本是否成功复制当前目录下的mpc.exe文件?尝试在'cp'命令中指定源mpc.exe的完整路径。 – rush 2012-07-20 19:30:57

+0

@Almo:谢谢你的回复。我在头文件中使用bash而不是sh进行了实验。在那里没有太大的区别。同样的错误。 – 2012-07-20 19:37:52

回答

1

你在Cygwin上。

我敢打赌,这条线:

cp ./dir1/dir2/mpc.exe ./mpc.exe 

有结尾的Windows风格的CR-LF线。 shell(sh或bash)将CR解释为文件名的一部分,因此它将文件复制到"./mpc.exe\r"

通过dos2unix筛选脚本。一定要先阅读手册页;与大多数文本过滤器不同,它通常会覆盖输入文件。

背景:

的Unix使用一个单一的ASCII LF来纪念在文本文件中的行的末尾。 Windows使用CR-LF对。 Cygwin是一个类似于Unix的仿真层,位于Windows之上,所以它往往成为带有冲突的行尾表示的丰富问题。

特别是,Unix shell通常不会将CR作为行尾指示符的一部分;相反,他们把它看作是另一个角色 - 根据你看文件的方式,它往往是不可见的。

您可能有LF和CR-LF行结尾的混合。如果它始终如一地使用CR-LF结尾,那么#!/bin/sh#!/bin/bash行将不被识别。

如果可能,只能使用Unix风格的编辑器(vim,emacs,nano或任何你喜欢的)来编辑shell脚本。如果您使用记事本或写字板创建脚本,则可能会遇到此类问题。

+0

我认为你在那里击中了公牛的眼睛。我确实使用了基于Windows的文本编辑器来创建脚本。作为一名初学者,我认为现在我会采取简单的方法,直到我掌握了Linux系统的这些微妙格式。我认为这应该工作。再次感谢。 – 2012-07-20 20:07:12

+0

@ user1538324:我看到你是新来的;欢迎!需要注意的几件事:如果您喜欢或不喜欢某个答案或问题,可以点击标题旁边的箭头来选中或取消选中;这适用于任何帖子。如果答案实际上回答了您的问题,您可以通过点击复选标记将其作为正确答案接受;你只能对你自问的问题做这个。在获得更多信誉点之前可能会有一些限制。 – 2012-07-20 20:10:57

相关问题