linux - such - Script Bash: intérprete malo
bad interpreter no such file or directory python (6)
¿Podría el script usar Dos nuevas líneas?
Intenta ejecutar dos2unix en él.
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 <cr><lf>
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 <lf>
al final de la línea.
Linux ahora está buscando un archivo llamado /bin/bash<cr>
para interpretar el archivo, donde <cr>
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 <cr>
adicional.
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 -i s/{ctrl+v}{ctrl+m}// filename
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é)