不要试图让两个之间的同一个脚本可移植 完全不同 炮弹。甚至sh和bash的兼容性也难以实现,并且那些使用相同的语法......(我甚至无法想象人们如何能够首先站在csh中。)
像这样编写你的设置scriptlet:
test "$?BASH_VERSION" = "0" || eval 'setenv() { export "$1=$2"; }'
setenv CATALINA_HOME "/mnt/apps/tomcat/6.0.20/linux"
setenv CATALINA_BASE "/home/app1/server"
我在bash 4.2.20,tcsh 6.17和破折号0.5.7中对此进行了测试。
更合理的解决方案:
您可以将设置保留为纯文本,如下所示:
~/tomcat/catalina-home
/mnt/apps/tomcat/6.0.20/linux
你的bash脚本
export CATALINA_HOME=$(< ~/tomcat/catalina-home)
export CATALINA_BASE=$(< ~/tomcat/catalina-base)
你的csh脚本
setenv CATALINA_HOME "`cat ~/tomcat/catalina-home`"
setenv CATALINA_BASE "`cat ~/tomcat/catalina-base`"
您可以编写一个用于设置环境的包装器:
/usr/bin/tcat
#!/bin/sh
# you can use any, *any* language for this one
export CATALINA_HOME=/mnt/apps/tomcat/6.0.20/linux
export CATALINA_BASE=/home/app1/server
exec "$@"
如果你有 myscript
,你会像它一样运行它 tcat myscript args args args
您可以通过设置包含原始数据和运行脚本的“env目录”来组合上述两种方法 丹伯恩斯坦 envdir
要么 格里特帕佩的 chpst
:
echo "/mnt/apps/tomcat/6.0.20/linux" > ~/tomcat-envdir/CATALINA_HOME
echo "/home/app1/server" > ~/tomcat-envdir/CATALINA_BASE
envdir ~/tomcat-envdir/ myscript
chpst -e ~/tomcat-envdir/ myscript