这是交易。我在Win7环境中安装了cygwin。这是我将在命令行中执行的一系列操作,一切正常,
文件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 :(得分: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脚本。如果您使用记事本或写字板创建脚本,则可能会遇到此类问题。