首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将csh脚本转换为bash脚本

将csh脚本转换为bash脚本
EN

Stack Overflow用户
提问于 2012-06-07 14:31:12
回答 2查看 7K关注 0票数 1

我目前正在将linux上的csh脚本转换为Mac狮子上的bash脚本。

csh脚本如下所示:

代码语言:javascript
复制
setenv CNS_SOLVE '/Users/ucbthsa/Documents/haddock2.1/software/bin/'
setenv CNS_SOLVE $CNS_SOLVE
if ( -d $CNS_SOLVE ) then
    if ( ! $?CNS_ARCH ) setenv CNS_ARCH `$CNS_SOLVE/bin/getarch`
else
    setenv CNS_ARCH 'unknown'
endif

我对Mac脚本的转换如下所示:

代码语言:javascript
复制
export CNS_SOLVE='/Users/ucbthsa/Documents/haddock2.1/software/bin/cns_solve_1.3'
export CNS_SOLVE=$CNS_SOLVE

if [ -d $CNS_SOLVE ]; then
  if [ ! $?CNS_ARCH ]; then
    export CNS_ARCH='$CNS_SOLVE/bin/getarch'
else
  export CNS_ARCH='unknown'
endif

当我尝试并来源Mac脚本时,我会得到以下错误:

-bash: cns_solve_env:第10行:语法错误:文件的意外结束

我不明白为什么我会犯这个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-07 14:33:35

您应该使用fi而不是endif,而不是关闭第一个(如果有的话):

代码语言:javascript
复制
export CNS_SOLVE='/Users/ucbthsa/Documents/haddock2.1/software/bin/cns_solve_1.3'
export CNS_SOLVE=$CNS_SOLVE

if [ -d $CNS_SOLVE ]; then
  if [ -z $CNS_ARCH ]; then
    export CNS_ARCH="$CNS_SOLVE/bin/getarch"
  fi
else
  export CNS_ARCH='unknown'
fi

*编辑:更改了第二个测试,正如威廉·珀塞尔指出的那样,它不会像在bash中那样工作。

票数 3
EN

Stack Overflow用户

发布于 2012-06-07 14:35:46

在sh中,$?CNS_ARCH的含义是不同的。使用:

代码语言:javascript
复制
test -z "$CNS_ARCH" && CNS_ARCH=$($CNS_SOLVE/bin/getarch)

代码语言:javascript
复制
CNS_ARCH=${CNS_ARCH-$( $CNS_SOLVE/bin/getarch)}

请注意,它们的含义略有不同。第一个是如果CNS_ARCH已经设置了CNS_ARCH,但是是空字符串,那么第二个是空字符串,而第二个是空的,但是是空的,这是$?在csh中所做的,但可能不是您真正想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10933888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档