Script Bash: intérprete malo

Pregunta: Recibo este mensaje de error:

exportar: intérprete incorrecto: no existe tal archivo o directorio

cuando ejecuto este script 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 @ " 

Pero el camino de bash parece ser correcto:

 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# 

¿Qué estoy haciendo mal? ¿O es esto un error Lucid Lynx?

Hice chmod + x

La primera línea: #! / Bin / bash

Le dice a Linux dónde encontrar el intérprete.

Es muy probable que haya creado este archivo con un editor de Windows, que colocará un al final de cada línea. Este es el estándar bajo dos / ventanas. Sin embargo, en Unix / Linux, el estándar es simplemente poner un al final de la línea.

Linux ahora está buscando un archivo llamado /bin/bash para interpretar el archivo, donde es un carácter de retorno de carro, que es un carácter de archivo válido en Linux. Tal archivo no existe. De ahí el error.

Solución: edite el archivo con un editor en Linux y elimine el adicional.

¿Podría el script usar Dos nuevas líneas?

Intenta ejecutar dos2unix en él.

Parece que las cosas se han configurado para anular de alguna manera el comando integrado de export . Esto se puede hacer a través de una función exportada o la enable incorporada, por ejemplo. Trate de poner type export en el script para verificar. Si está configurando BASH_ENV , probablemente no debería.

Si se llama a bash como sh , habilita el modo POSIX y no permite anular la export con una función, como lo requiere POSIX. Del mismo modo, la mayoría de las otras shells instaladas como /bin/sh siguen POSIX en esto y / o no permiten que el entorno de ejecución de una secuencia de comandos se desordene tan fuertemente como a través de la importación de funciones del entorno.

Por cierto, el guión parece diseñado para ser fuente, es decir . ./mono-2.6-environment . ./mono-2.6-environment lugar de ./mono-2.6-environment .

Tenía el mismo problema. Fuerza bruta utilizada:

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

y esto hizo el truco

(Por supuesto, me gustaría saber por qué)

Lo hiciste así (mencionaste chmod + x)

 . /path/to/it 

o así:

 ./it 

?

Sospecho que tu código se ejecutó en un nuevo proceso, y todo lo que dijiste se perdió. Por lo tanto, las variables no se expandirán en su caparazón actual . Sin embargo, esto no explica el mal error de intérprete que vio. Creo que también tienes un problema terminal (como en el terminal, lo que solías hablar con el cat ).

El hecho de que su mensaje no hizo lo que dijo:

 `PS1="[mono-2.6] \w @` " 

Me hace pensar que corrió, no el código fuente. Hay una diferencia. No pude conseguir lo que publicaste para romper.

Lo que funcionó para mí fue cuando dos2Unix no estaba en el sistema con el que estaba trabajando:

 sed -is/{ctrl+v}{ctrl+m}// filename