Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中执行tcsh命令_Bash_Tcsh - Fatal编程技术网

在bash脚本中执行tcsh命令

在bash脚本中执行tcsh命令,bash,tcsh,Bash,Tcsh,在bash脚本中,我需要执行这个tcsh命令。此命令在tcsh命令提示符下工作正常,但在我的bash脚本中工作不正常 eval `/app/modules/0/bin/modulecmd tcsh $variable` 我试过几种方法,比如添加 /usr/bin/tcsh -c eval `/app/modules/0/bin/modulecmd tcsh $variable` 但它说:没有这样的文件或目录 编辑:当前代码: # hook for some commands echo 'T

在bash脚本中,我需要执行这个tcsh命令。此命令在tcsh命令提示符下工作正常,但在我的bash脚本中工作不正常

eval `/app/modules/0/bin/modulecmd tcsh $variable`
我试过几种方法,比如添加

/usr/bin/tcsh -c eval `/app/modules/0/bin/modulecmd tcsh $variable`
但它说:没有这样的文件或目录

编辑:当前代码:

# 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
再次编辑:

实际设置了环境变量,但不针对运行脚本的用户

  • /app/modules/0/bin/modulecmd tcsh荷载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:/usr/local/man:/usr/man:/usr/man:/usr/lsb/man:/mpich/man:/opt/man:/opt/man:/opt/man:/opt/gmodules/lsb/man:/mpich/man:/opt/gm/;setenv路径其中一个//app///app////app///GC/4.3.3.3.4.4/4/4/3.4/4/4/3.2/LMWP3/3.3/3/3/3.3/3.3/3/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4///////app//app//app////////3.2.2/3.2/3.2/3.2/3.2/3.2/3.2/3.2/3.2/3.2/3.2/3/3/3/3/3.1/3.1/3.1.1.3.1.1.1/3/3.1.1.6/3/3/3/3/3/1/1/1.1.6/1.6/1.6/1/1/1.1:/app/ac读取/9.4.0/LMWP3/3/3/1/1/1/2/3/1/1/1/1/1/1/9/4.4.0/LMWP3/1/3/4/3/3/2/2/2/2/2/2/2/2/2/2/2/2/2/2/1/1/1/1/1/1/1/2/2/2/2/3/3/2/3/3/3/2/3/3/3/3/3/3/3/3/4/4////////////4/4/4/4/3/4/4/4/////////////////////4/4/4/4/4/4/4/4/4/4/4/4/4/4/Adobe或者或者或者将将将将将将将将//垃圾箱:/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文件'/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.022:/env/common/modules/openoffice/3.2.1:/env/common/modules/modules/thunderbird/3.1.6:/env/common/modules/xemacs/21.5.29:/env/7.3.021:/nx/common/client/7.0:/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加载了模块的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_模块:gmp/4.2.2.4:mpfr/2.0:gcc/4.4';setenv PKG_CONFIG_PATH'/app/gcc/4.3.4/lib/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig';+出口0
看。您必须引用
eval…
命令:

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

否则,
bash
将解释backticks命令。

eval
在bash中工作。。命令替换返回什么?您的预期结果是什么?@squiguy good call,Shell在大多数系统上都位于
/bin
中。然后,如果我按原样运行发布的第一个RSE代码,我会遇到另一个问题:get::line 20:setenv:command notfound@Fredriksetenv为
tsch
shell设置环境变量。在bash内部运行tcsh命令永远不会导致bash脚本获取环境变量。什么是modulecmd?到tcsh的路径正确。->哪个tcsh/usr/bin/tcsh我不希望看到返回,如果它工作,应该发生的是vi$变量witch是应用程序的路径,应该放在$path的第一位。这里有一个详细的输出:执行此操作时,我得到非法变量或未定义:$@=非法$var1=未定义。我猜tcsh-c不知道这些变量。发布我的代码以便您可以使用。当您用variable的值替换
$variable
时,它应该会起作用。参见
echo$variable
我设法找到了一所快速查看过它的大学。这比我想象的要复杂。是的,这个解决方案在技术上是可行的,但它是在一个新的shell中执行的,然后消失。一个最可能有效的解决方案是用tcsh编写整个脚本。我可以在bash中做一些事情,但我不想做什么。