【问题标题】:bash, executable runs in commandline but not in scriptbash,可执行文件在命令行中运行,但不在脚本中
【发布时间】:2012-07-21 03:58:20
【问题描述】:

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

【问题讨论】:

  • 如果您真的希望这是一个 bash 脚本,您需要在顶部使用 #!/bin/bash,而不是 #!/bin/sh 但我不知道这是否是您的问题,因为您的文件以 @ 命名987654327@ 所以也许你的意思不是 bash 在这个问题中。
  • 脚本是否成功将mpc.exe复制到当前目录?尝试在cp 命令中指定源mpc.exe 的完整路径。
  • @Almo:感谢您的回复。我在标题处尝试了 bash 而不是 sh 。那里没有太大区别。同样的错误。
  • @rush:我完全有理由相信可执行文件已正确复制。目标文件和源文件的大小相同(准确地说是 7053 KB)。但是,肯定有一件奇怪的事情正在发生。复制过程完成后,Windows 文件夹会显示文件的以下标记:“mpc.exe *”。详细地说,可执行文件名称后跟一个空格和一个看起来像浮动“黑点”的东西。我不知道如何在最后没有这些角色。无论我使用什么扩展,它们都在那里,包括我根本没有指定任何扩展。
  • 但是,最后那些无关的字符,'空白+浮动黑点'不显示相同的命令,'cp ./dir1/dir2/mpc.exe ./mpc.exe ' 在命令行中输入。

标签: shell cygwin command-line-arguments


【解决方案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/sh#!/bin/bash 行。

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

【讨论】:

  • 我认为你在里面击中了靶心。我确实使用了基于 Windows 的文本编辑器来创建脚本。作为一个初学者,我想我现在会采取简单的方法,直到我掌握了一些用于 linux 系统的微妙格式。我认为这应该有效。再次感谢。
  • @user1538324:我看到你是新来的;欢迎!需要注意的几件事:如果您喜欢或不喜欢某个答案或问题,您可以通过单击标题旁边的箭头之一来赞成或反对它;这适用于任何职位。如果一个答案确实回答了您的问题,您可以通过单击复选标记接受它作为正确答案;您只能针对您自己提出的问题执行此操作。在您获得更多声望点之前,可能会有一些限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 2012-10-16
  • 2020-01-02
  • 1970-01-01
  • 2012-02-08
  • 2017-01-04
相关资源
最近更新 更多