【问题标题】:execute tcsh command in bash script在 bash 脚本中执行 tcsh 命令
【发布时间】:2012-10-16 10:20:02
【问题描述】:

在 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/mp​​i/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/mp​​i/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/客户端/11.1:/app/acroread/9.4.0/LMWP3/Adobe/Reader9/bin:/home/eb rfred/.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/mp​​i/gcc/openmpi/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/quest/bin:/usr/本地/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 LOADEDMO DULES '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

【问题讨论】:

  • eval 在 bash 中工作。命令替换返回什么?您的预期结果是什么?
  • @squiguy 好电话,shell 在大多数系统上都存在于/bin
  • 那么我还有另一个问题,如果我按原样运行我发布的第一个代码,我会得到:: line 20: setenv: command not found
  • @Fredrik setenv 为tsch shell 设置一个环境变量。在 bash 中运行 tcsh 命令永远不会导致 bash 脚本获取环境变量。什么是modulecmd?
  • tcsh 的路径是正确的。 -> which tcsh /usr/bin/tcsh 如果它有效,我不希望看到返回,应该发生的是 vi $variable 女巫是应用程序的路径应该放在 $path 中。详细输出在这里:pastebin.com/WCZMf6vj

标签: bash tcsh


【解决方案1】:

man tcsh。您必须引用eval ... 命令:

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

否则bash 将解释反引号命令。

【讨论】:

  • 当我这样做时得到非法变量或未定义:$@ = 非法 $var1 = undefined。我猜 tcsh -c 不知道这些变量。发布我的代码,以便您查看。
  • 当您用变量的值替换 $variable 时,它应该可以工作。见echo $variable
  • 我设法找到了一所快速浏览过它的大学。它比我想象的要复杂。是的,这个解决方案在技术上是可行的,但它是在一个新的 shell 中执行的,然后就消失了。最有可能可行的解决方案是在 tcsh 中编写整个脚本。有点罪,我可以用大麦在 bash 中做一些事情,这不是我想做的。
猜你喜欢
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2021-02-12
  • 2020-12-08
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多