代码之家  ›  专栏  ›  技术社区  ›  brienna

在bash中运行CSH可执行文件会引发语法错误

  •  0
  • brienna  · 技术社区  · 6 年前

    我需要在我的MacOS X High Sierra上运行NACCESS程序。

    最突出的错误是 if: Expression Syntax.

    此错误可能是因为NACCESS可执行文件是具有 #!/bin/csh 在它的第一行。

    我把第一行改成 #!/bin/bash 开始出现错误,比如 ./naccess: line 14: syntax error near unexpected token `1' ./naccess: line 14: ` exit(1)'

    同样,我认为这是因为可执行文件需要在CSH shell中执行,而不是bash。 exit(1) exit 1 ,据 this resource .

    我试着打字 csh 进入终端切换外壳,但 echo $SHELL 指挥部只是告诉我我还在狂欢。

    grep '^#!' /usr/bin/* 找不到任何CSH弹壳。我试图下载 tcsh 使用自制。但我真的不知道我现在在做什么。

    我知道CSH shell是不受鼓励的,但是如何让CSH shell在我的Mac上运行,或者如何让nacess运行?

    [编辑] 以下是NACCESS代码的前几行:

    (请注意,我是用.pdb file参数运行它的,并且我已经适当地将路径\u设置为\u naccess\u repository。我真的明白了 usage naccess pdb_file [-p probe_size] [-r vdw_file] [-s stdfile] [-z zslice] -[hwyfaclqb] 如果我只跑 ./naccess )

    #!/bin/csh
    set EXE_PATH = /path/to/repo
    #naccess_start
    
    set nargs = $#argv
    if ( $nargs < 1 ) then
       echo "usage naccess pdb_file [-p probe_size] [-r vdw_file] [-s stdfile] [-z zslice] -[hwyfaclqb]"
       exit(1)
    endif
    
    set PDBFILE = 0
    set VDWFILE = 0
    set STDFILE = 0
    set probe = 1.40
    set zslice = 0.05
    set hets = 0
    set wats = 0
    set hyds = 0
    set full = 0
    set asao = 0
    set cont = 0
    set oldr = 0
    set nbac = 0
    
    while ( $#argv )
      switch ($argv[1])
         case -[qQ]:
        echo "Naccess2.1 S.J.Hubbard June 1996"
        echo "Usage: naccess pdb_file [-p probe_size] [-r vdw_file] [-s stdfile] [-z zslice] -[hwyfaclq]"
        echo " "
        echo "Options:"
        echo " -p = probe size (next arg probe size)"
        echo " -z = accuracy (next arg is accuracy)"
        echo " -r = vdw radii file (next arg is filename)"
        echo " -s = standard accessibilities file (next arg is filename)"
        echo " -h = hetatoms ?"
        echo " -w = waters ?"
        echo " -y = hydrogens ?"
        echo " -f = full asa output format ?"
        echo " -a = produce asa file only, no rsa file ?"
        echo " -c = output atomic contact areas in asa file instead of accessible areas"
        echo " -l = old RSA output format (long)"
        echo " -b = consider alpha carbons as backbone not sidechain"
        echo " -q = print the usage line and options list"
        echo " "
            exit
            breaksw
         case -[pP]:
        shift
        set probe = $argv[1]
        breaksw
         case -[zZ]:
            shift
            set zslice = $argv[1]
        breaksw
         case -[hH]:
            set hets = 1
        breaksw
         case -[wW]:
            set wats = 1
            breaksw
         case -[yY]:
            set hyds = 1
            breaksw
         case -[rR]:
            shift
            set VDWFILE = $argv[1]
            breaksw
         case -[sS]:
            shift
            set STDFILE = $argv[1]
            breaksw
         case -[fF]:
            set full = 1
            breaksw
         case -[aA]:
            set asao = 1
            breaksw
         case -[cC]:
            set cont = 1
            breaksw
         case -[lL]:
            set oldr = 1
            breaksw
         case -[bB]:
            set nbac = 1
            breaksw
         default:
            if ( -e $argv[1] && $PDBFILE == 0 ) then
           set PDBFILE = $argv[1]
            endif
        breaksw
      endsw
      shift
    end
    #
    if ( $PDBFILE == 0 ) then
      echo "usage: you must supply a pdb format file"
      exit(1)
    endif
    

    [编辑]我没有正确设置路径>&书信电报;所以这个问题主要是关于如何在bash中运行csh脚本。这个csh脚本没有问题。

    2 回复  |  直到 6 年前
        1
  •  2
  •   kabanus    6 年前

    这个 SHELL 变量只是列出您的第一个登录shell,如果您运行另一个shell,它不会更改。 echo $0 会告诉你你在跑步 csh bash 把雪邦换成 tcsh

    #!/usr/bin/tcsh -f
    

    或者把蛇帮完全去掉然后跑

    csh ./naccess
    

    如果你是第一个选择,而且不知道在哪里 csh公司 是的,打吧

    which csh
    

    找到路。正如@Chepner所补充的,由于文件带有 csh公司 谢邦,别碰它,照上面说的做就行了。

        2
  •  1
  •   Keith Thompson    6 年前

    #! ,称为 "shebang"

    如果你有一个脚本叫做 foo

    #!/bin/csh
    

    然后打字 ./foo 相当于 /bin/csh foo 必须是可执行的;使用 chmod +x 如果还没有的话。)

    $SHELL 环境变量。

    你呢 #! 你不必那么做。

    /bin/csh 在您的系统中不存在,或者它不是C-shell。

    tcsh 是的更新版本 csh csh公司

    找出哪里 #! tcsh公司 你自己——但你说你打字了

    type csh 我会告诉你在哪里 csh公司

    顺便说一句 #! csh或tcsh脚本的行应包括 -f 选项:

    #!/bin/csh -f
    

    $HOME/.cshrc )运行脚本时。它节省了时间,并确保脚本是可移植的,而不依赖于一个用户的环境(确实如此 应用于sh或bash脚本;sh和bash有一个 -f级

    我试着打字 csh公司 进入终端切换外壳,但 echo $SHELL

    调用shell不会改变 $外壳

    你能看出来你是不是在跑步 tcsh公司 通过键入 echo $tcsh echo $version . (csh没有这些变量)。你能看出来你是不是在跑步 bash echo $BASH_VERSION .