我目前正在将linux上的csh脚本转换为Mac狮子上的bash脚本。
csh脚本如下所示:
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脚本的转换如下所示:
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行:语法错误:文件的意外结束
我不明白为什么我会犯这个错误。
发布于 2012-06-07 14:33:35
您应该使用fi而不是endif,而不是关闭第一个(如果有的话):
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中那样工作。
发布于 2012-06-07 14:35:46
在sh中,$?CNS_ARCH的含义是不同的。使用:
test -z "$CNS_ARCH" && CNS_ARCH=$($CNS_SOLVE/bin/getarch)或
CNS_ARCH=${CNS_ARCH-$( $CNS_SOLVE/bin/getarch)}请注意,它们的含义略有不同。第一个是如果CNS_ARCH已经设置了CNS_ARCH,但是是空字符串,那么第二个是空字符串,而第二个是空的,但是是空的,这是$?在csh中所做的,但可能不是您真正想要的。
https://stackoverflow.com/questions/10933888
复制相似问题