Bash 脚本:糟糕的解释器

2024-10-17 08:47:00
admin
原创
65
摘要:问题描述:问题:我收到此错误消息:导出:错误的解释器:没有此文件或目录当我执行这个 bash 脚本时:#!/bin/bash MONO_PREFIX=/opt/mono-2.6 GNOME_PREFIX=/opt/gnome-2.6 export DYLD_LIBRARY_PATH=$MONO_PREFIX/...

问题描述:

问题:我收到此错误消息:

导出:错误的解释器:没有此文件或目录

当我执行这个 bash 脚本时:

#!/bin/bash
MONO_PREFIX=/opt/mono-2.6
GNOME_PREFIX=/opt/gnome-2.6
export DYLD_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig
PATH=$MONO_PREFIX/bin:$PATH
PS1="[mono-2.6] w @ "

但 bash 路径似乎是正确的:

asshat@IS1300:~/sources/mono-2.6# which bash
/bin/bash

asshat@IS1300:~# cd sources/
asshat@IS1300:~/sources# cd mono-2.6/
asshat@IS1300:~/sources/mono-2.6# ./mono-2.6-environment
export: bad interpreter: No such file or directory
asshat@IS1300:~/sources/mono-2.6# ls
download  mono-2.4  mono-2.4-environment  mono-2.6  mono-2.6-environment
asshat@IS1300:~/sources/mono-2.6# cp mono-2.6-environment mono-2.6-environment.sh
asshat@IS1300:~/sources/mono-2.6# ./mono-2.6-environment.sh
export: bad interpreter: No such file or directory
asshat@IS1300:~/sources/mono-2.6# ls
download  mono-2.4-environment  mono-2.6-environment
mono-2.4  mono-2.6              mono-2.6-environment.sh
asshat@IS1300:~/sources/mono-2.6# bash mono-2.6-environment
asshat@IS1300:~/sources/mono-2.6#

我做错了什么?或者这是 Lucid Lynx 的错误?

我做到了chmod + x


解决方案 1:

第一行,#!/bin/bash,告诉 Linux 在哪里找到解释器。该脚本还应该可以使用 执行chmod +x script.sh,看来您已经这样做了。

您很可能使用 Windows 编辑器创建了此文件,它会<cr><lf>在每行末尾放置一个。这是 DOS/Windows 下的标准。OS X 会在每行末尾放置一个。然而,在 Unix/Linux 下,标准是在行末<cr>放置一个。<lf>

Linux 现在正在寻找一个文件/bin/bash<cr>来解释该文件,其中<cr>是回车符,这是 Linux 下有效的文件字符。这样的文件不存在。因此出现错误。

解决方案:使用 Linux 上的编辑器编辑该文件并删除多余的<cr>。在 Windows 上编辑该文件时通常有效的一个工具是dos2unix

解决方案 2:

脚本可以使用 Dos 换行符吗?

尝试在其上运行 dos2unix。

解决方案 3:

看起来已经配置了一些东西来以某种方式覆盖内置函数。例如,export这可以通过导出函数或内置函数来完成。尝试放入脚本进行检查。如果您正在设置,您可能不应该这样做。enable`type export`BASH_ENV

如果 bash 以 形式调用sh,它将启用 POSIX 模式,并且不允许export使用函数覆盖,这是 POSIX 的要求。同样,大多数以/bin/sh形式安装的其他 shell 也遵循 POSIX 的规定,并且/或者不允许通过从环境中导入函数来严重破坏脚本的执行环境。

顺便说一句,该脚本似乎设计为源,即. ./mono-2.6-environment而不是./mono-2.6-environment

解决方案 4:

/我遇到了类似的错误,但就我而言,我之前忘了添加bin,所以遇到了错误的解释器错误。也尝试过
sudo apt-get install dos2unix -y package

我最初用的是这个:

#! bin/bash ( i was missing / before bin )

再次检查路径。

解决方案 5:

遇到了同样的问题。使用了暴力破解:

/bin/sh /full/path/to/configure --options

&这个招数成功了

(当然我想知道为什么)

解决方案 6:

对我有用的是当我使用的系统上没有 dos2Unix 时:

sed -i s/{ctrl+v}{ctrl+m}// filename

解决方案 7:

这可能是shebang 中含有同形 unicode 字符的情况。换句话说,shebang 中可能存在不可见或相似的字符,而这些字符实际上并不代表字符串#!/bin/bash。请尝试在十六进制编辑器中查看这些字符。

解决方案 8:

当文件系统出现问题时,有时会发生这种情况。尝试移动或重命名文件。如果您看到“过时的文件句柄”错误,那么这就是您的问题。

例如,我们在 CentOS docker 上遇到的情况

$ ./test.sh 
-bash: ./test.sh: /bin/bash: bad interpreter: Invalid argument
$ ls -alstr test.sh 
20 -r-xr-xr-x 0 omen omen 17874 Jun 20 01:36 test.sh
$ cp test.sh testcopy.sh
$ ./testcopy.sh
Happy Days

$ mv test.sh footest.sh
mv: cannot move ‘test.sh’ to ‘footest.sh’: Stale file handle
$ rm test.sh 
rm: cannot remove ‘test.sh’: Stale file handle

您可以复制并读取该文件。但不能移动它!也不能删除它。可能是某些奇怪的 docker 文件系统问题。

解决方案:重新创建 docker 容器,或者文件系统修复磁盘可能会有帮助,或者当然format c: :-D :-o

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用