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
Fredrik
  • 299
  • 2
  • 5
  • 12
  • `eval` works in bash.. What does the command substitution return? What are your expected results? – jordanm Oct 26 '12 at 06:43
  • @squiguy good call, shells live in `/bin` on most systems. – jordanm Oct 26 '12 at 06:45
  • then I have another problem, if I run the firse code i posted as is i get: : line 20: setenv: command not found – Fredrik Oct 26 '12 at 06: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? – jordanm Oct 26 '12 at 06: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: http://pastebin.com/WCZMf6vj – Fredrik Oct 26 '12 at 06:52
  • @jordanm modulecmd is the executable of the module app see more here: http://modules.sourceforge.net/ – Fredrik Oct 26 '12 at 06:54
  • @Fredrik: You cannot change parent's (bash's) PATH by changing a child's (tcsh's) path. – choroba Oct 26 '12 at 08:38
  • It doesent even work to create an empty file and put: eval `/app/modules/0/bin/modulecmd tcsh load firefox/3.6.13`, in it. module must execute the command in a strange way that make it hard to execute in any other place than in the shell. An scsh -v script clearly show that the environmental variables are set but not for my user. – Fredrik Oct 26 '12 at 13:09
  • I wonder if there has been any important updates between my version: Modules 3.1.6 - releasdate Thu Jan 3 20:56:16 PST 2002 and current release Modules 3.2.9 releasedate Nov 24, 2011. Sent a support ticket to the developer. But the development in the computer industry isn't that fast. – Fredrik Oct 26 '12 at 13:51

1 Answers1

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.

Olaf Dietsche
  • 72,253
  • 8
  • 102
  • 198
  • 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. – Fredrik Oct 26 '12 at 10:38
  • It should work, when you substitue `$variable` with the value of variable. See `echo $variable` – Olaf Dietsche Oct 26 '12 at 10:41
  • 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. – Fredrik Oct 26 '12 at 11:31