【问题标题】:Run in command line but gives error in shell script?在命令行中运行但在 shell 脚本中出错?
【发布时间】:2017-11-03 07:03:23
【问题描述】:

我是 Linux 新手。我有一个测试系统 SuSe 64 位。我有一个使用 rpm 文件安装的可执行文件。当我通过命令行运行时,可执行文件运行良好。

linux:linux_test>path/to/executable arg1 arg2

它运行成功,但是当我将相同的命令放入 shell 脚本时,它会抛出 No such Directory or File 的错误

我使用file 命令检查了文件类型,得到了以下输出:

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/LINUX 2.4.0, stripped

更多详情: 我要执行的命令是: /opt/cds/scripts/EINJ /call del force 其中/opt/cds/scripts/EINJ 可以通过路径执行,/call del force 是传递的参数

我的 shell 脚本包含以下 2 行:

#!/bin/bash /opt/cds/scripts/EINJ /call del force

它给了我错误: /temp.sh: line2: /opt/cds/scripts/EINJ : No such file or directory

我也试过把命令改成cd /opt/cds/scripts && ./ENIJ /call del force

请帮助我如何从 shell 脚本执行它。

提前致谢

【问题讨论】:

  • 脚本的第一行是什么样的?您指定的解释器是什么? #!/bin/bash?这是 Leap 42.3 吗?您尝试运行什么可执行文件?
  • 我没有指定任何解释器,我只是在文件中添加了命令并使用 .sh 扩展名保存并使用 sh test.sh 命令执行。这个工具做一些BIOS相关的配置
  • #!/bin/bash 添加到顶部。然后要么chmod 0755 filename.sh 设置执行位(然后用./filename.sh 运行它)或者只用bash filename.sh 运行它。当您使用sh 时,您正在调用一个符合 POSIX 的 shell,它缺乏 bash 的大部分功能(sh 是破折号(Debian Almquist Shell)一个 shell 脚本只执行您可以在命令行上执行的相同系列的命令,只要您不会更改脚本运行的环境。因此,请将您在命令行中运行的内容准确地放入脚本中(注意脚本中的 arg1arg2"$1""$2"
  • 请显示脚本

标签: linux shell


【解决方案1】:

我假设您最初是通过相对路径 ./executable.sh 执行文件的。您必须使用 shell 脚本中的完整路径或 cd 到脚本中的正确目录。

/path/to/executable.sh arg1 arg 2

cd /path/to ./executable.sh arg1 arg2

我建议第一个选项,但是您还有其他一些选项:

  1. executable.sh 的位置添加到您的$PATH
  2. executable.sh 放置在任何地方都可以访问的地方,即/usr/local/bin

不要忘记为这个文件设置权限,这可以通过chmod +x executable.shchmod 0755 executable.sh 来完成。

请注意,这适用于任何可执行文件,而不仅仅是.sh

【讨论】:

  • 可执行文件不是 shell 格式,它是 ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),静态链接,用于 GNU/LINUX 2.4.0,已剥离乙>。我试图在 shell 脚本文件中添加可执行命令,但失败并出现错误 No such File or Directory
  • 这应该适用于任何类型的可执行文件,无论是 .sh 或 .exe 还是其他文件。您可以编辑您的问题并添加脚本吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2023-01-09
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
相关资源
最近更新 更多