1

这是交易。我已经在 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 命令和脚本。请帮忙。

4

1 回答 1

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 是一个在 Windows 之上的类 Unix 仿真层,因此它往往是与行尾表示冲突的问题的丰富来源。

尤其是 Unix shell,通常不会将 CR 识别为行尾指示符的一部分。相反,他们将其视为另一个字符——一个往往不可见的字符,具体取决于您如何查看文件。

您可能混合使用了 LF 和 CR-LF 行尾。如果它始终使用 CR-LF 结尾,则#!/bin/shor#!/bin/bash行将无法被识别。

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

于 2012-07-20T19:58:20.203 回答