Question: I get this error message:
export: bad interpreter: No such file or directory
when I execute this bash script:
#!/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 @ "
But the bash path seems to be correct:
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#
What am I doing wrong? Or is this a Lucid Lynx bug?
I did chmod + x
The first line,
#!/bin/bash
, tells Linux where to find the interpreter. The script should also be executable withchmod +x script.sh
, which it appears you did.It is highly likely that you created this file with a windows editor, which will place a
<cr><lf>
at the end of each line. This is the standard under dos / windows. OS X will place a<cr>
at the end of each line. However, under Unix / Linux, the standard is to just put a<lf>
at the end of the line.Linux is now looking for a file called
/bin/bash<cr>
to interpret the file, where<cr>
is a carriage return character, which is a valid file character under Linux. Such a file doesn't exist. Hence the error.Solution: Edit the file with an editor on Linux and get rid of the extra
<cr>
. One tool that usually works when the file is edited on Windows isdos2unix
.what worked for me was when dos2Unix wasn't on the system I was working with:
Had the same problem. Used brute force:
& this did the trick
(Of course I'd like to know why)
It looks like things have been configured to override the
export
builtin somehow. This can be done via an exported function or theenable
builtin, for example. Try puttingtype export
in the script to check. If you are settingBASH_ENV
, you probably shouldn't.If bash is called as
sh
, it enables POSIX mode and does not allowexport
to be overridden with a function, as required by POSIX. Likewise, most other shells installed as/bin/sh
follow POSIX in this and/or do not allow the execution environment of a script to be messed up so strongly as through importing functions from the environment.By the way, the script seems designed to be sourced, i.e.
. ./mono-2.6-environment
instead of./mono-2.6-environment
.This happens sometimes when file system goes funny. Try to move or rename the file. If you see "Stale file handle" error this is your problem.
e.g. happened us with CentOS docker
You can copy the file and read it. But not move it! Nor remove it. Some weird docker file-system thing maybe.
Solution: re-create the docker container OR maybe file system repair disk would help OR of course
format c:
:-D :-oDid you run it like this (you did mention chmod +x)
or like this:
?
I have a sneaking suspicion that your code executed in a new process, and everything you told it was lost. Hence, variables will not be expanded in your current shell. However, this does not explain the bad interpreter error that you saw. I think you also have a terminal problem (as in terminal, what you used to talk to
cat
).The fact that your prompt did not do what this said:
Makes me think you ran, not sourced the code. There is a difference. I could not get what you posted to break.