0

In a bash script I need to execute this tcsh command. This command works fine in a tcsh command prompt but not in my bash script.

eval `/app/modules/0/bin/modulecmd tcsh $variable`

I have tried several things like adding

/usr/bin/tcsh -c eval `/app/modules/0/bin/modulecmd tcsh $variable`

but then it says: No such file or directory.

Edit: current code:

# hook for some commands

echo 'To be sure the version that are loading exist for your platform plase use: "module aplikation load/version" instead of "module load application". A check will then be done.'
cmd=$(basename "$0") # it givs error here if i start with: tcsh -v xmodule load firefox/3.6.13     
var1=$(echo "$@" | awk '{print $2}' | cut -f1 -d"/") # Gets the application name and put it into var1
var2=$(echo "$@" | grep -o '[^/]*$')  # Gets version name and put it into var2 

if [[ $cmd = "xmodule" ]]
        then
#First if statement: checking if a spesific version of an apllication is requested.
        if  [[ ${@} =~ .*/.* && ${@} =~ ((^)|([ ]))load(($)|([ ])) ]]
        then
           if find /app/$var1 -noleaf -maxdepth 1 -type l -o -type d | grep $var2; then #matching version to symlink or dir in /app/appname/
           echo "$@"
           tcsh -c 'eval `/app/modules/0/bin/modulecmd tcsh $@`'  #execute the module command as normal if version exist
           exit $?
        else
           echo "Could not find $var1 or $var2, one of these things happend:"
           echo "$var1 was misspelled"
           echo "$var2 was misspelled"
           echo "version does exist as a module but not for your platform (see module avail $var1). Printing a list of suported versions:"
                ls /app/$var1/
           echo "exiting: please rety again"
           exit $?
        fi
fi
# Next check. Checking if default module version is loaded
fi
exit

EDIT again:

Environmental variables are actually set, but not for the user who runs the script

  • /app/modules/0/bin/modulecmd tcsh load gcc/4.3.4 setenv LD_LIBRARY_PATH '/app/mpfr/2.4.0/lib:/app/gmp/4.2.4/lib:/usr/lib64/mpi/gcc/openmpi/lib64';setenv LD_RUN_PATH '/app/mpfr/2.4.0/lib:/app/gmp/4.2.4/lib:/app/gcc/4.3.4/lib64:/app/gcc/4.3.4/lib';setenv MANPATH '/app/gcc/4.3.4/man:/app/emacs/23.2/LMWP3/share/man:/app/vim/7.3.021/LMWP3/share/man:/app/xemacs/21.5.29/LMWP3/share/man:/app/j2re/1.6.0_22/LMWP3/man:/usr/lib64/mpi/gcc/openmpi/man:/usr/share/man:/opt/quest/man:/usr/local/man:/usr/man:/opt/lsb/man:/opt/mpich/man:/opt/gnome/share/man:/app/modules/0/man:/app/modules/0/man';setenv PATH '/app/gcc/4.3.4/bin:/app/firefox/3.6.12/LMWP3:/app/emacs/23.2/LMWP3/bin:/app/sametime/8.0.2:/app/nxclient/3.4.0.7/LMWP3/bin:/app/vim/7.3.021/LMWP3/bin:/app/xemacs/21.5.29/LMWP3/bin:/app/thunderbird/3.1.6/LMWP3:/app/thunderbird/3.1.6/LMWP3/bin:/app/openoffice/3.2.1/LMWP3/opt/openoffice.org3/program:/app/openoffice/3.2.1/LMWP3/openoffice.org3/program:/app/j2re/1.6.0_22/LMWP3/bin:/app/ica/client/11.1:/app/acroread/9.4.0/LMWP3/Adobe/Reader9/bin:/home/ebrfred/.afs/0/rbin:/home/ebrfred/.afs/0/pbin:/env/seln/bin:/home/ebrfred/.afs/0/ibin:/usr/atria/bin:/usr/afsws/bin:/usr/NX/bin:/usr/lib64/mpi/gcc/openmpi/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/quest/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/openwin/bin:/opt/cross/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/gnome/bin:/usr/lib/qt3/bin:/usr/dt/bin:/usr/ccs/bin:/app/arc/0/bin';setenv LMFILES '/env/common/modules/firefox/3.6.12:/env/common/modules/acroread/9.4.0:/env/common/modules/flashplayer/10.1:/env/common/modules/ica/11.1:/env/common/modules/j2re/1.6.0_22:/env/common/modules/openoffice/3.2.1:/env/common/modules/thunderbird/3.1.6:/env/common/modules/xemacs/21.5.29:/env/common/modules/vim/7.3.021:/env/common/modules/nxclient/3.4.0.7:/env/common/modules/sametime/8.0.2:/env/common/modules/emacs/23.2:/home/ebrfred/.afs/0/imodules/isit_modules:/env/common/modules/gmp/4.2.4:/env/common/modules/mpfr/2.4.0:/env/common/modules/gcc/4.3.4';setenv LOADEDMODULES 'firefox/3.6.12:acroread/9.4.0:flashplayer/10.1:ica/11.1:j2re/1.6.0_22:openoffice/3.2.1:thunderbird/3.1.6:xemacs/21.5.29:vim/7.3.021:nxclient/3.4.0.7:sametime/8.0.2:emacs/23.2:isit_modules:gmp/4.2.4:mpfr/2.4.0:gcc/4.3.4';setenv PKG_CONFIG_PATH '/app/gcc/4.3.4/lib/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig';+ exit 0
9
  • eval works in bash.. What does the command substitution return? What are your expected results? Commented Oct 26, 2012 at 6:43
  • @squiguy good call, shells live in /bin on most systems. Commented Oct 26, 2012 at 6:45
  • then I have another problem, if I run the firse code i posted as is i get: : line 20: setenv: command not found Commented Oct 26, 2012 at 6:46
  • @Fredrik setenv sets an environment variable for the tsch shell. Running the tcsh command inside of bash will never cause the bash script to get the environment variable. What is modulecmd? Commented Oct 26, 2012 at 6:50
  • path to tcsh is correct. -> which tcsh /usr/bin/tcsh I don't expect to see a return if it works, what is supposed to happen is that vi $variable witch is a path to an app is supposed to be put first in $path. An verbose output is here: pastebin.com/WCZMf6vj Commented Oct 26, 2012 at 6:52

1 Answer 1

1

See man tcsh. You must quote the eval ... command:

tcsh -c "eval \`/app/modules/0/bin/modulecmd tcsh $variable\`"

Otherwise bash will interpret the backticks command.

Sign up to request clarification or add additional context in comments.

3 Comments

I get illegal variable or undefined when I do this: $@ = illegal $var1 = undefined. I guess that tcsh -c do not know about these varables. Posting my code so you can se.
It should work, when you substitue $variable with the value of variable. See echo $variable
I manage to get hold of a college that took a quick look at it. It is more complicated than i thought. Yes this solution technically works, but it is executed in an new shell that than disappears. A solution that most likely would work would to write the entire script in tcsh. Bit sins I can barley do stuff in bash it is nothing I want to do.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.