Bash 脚本:糟糕的解释器

2024-10-17 08:47:00
admin
原创
179
摘要:问题描述:问题:我收到此错误消息:导出:错误的解释器:没有此文件或目录当我执行这个 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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1129  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   87  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   79  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   89  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   82  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用