Não tente tornar o mesmo script portátil entre dois shells completamente diferentes . Mesmo a compatibilidade de sh e bash é difícil de alcançar, e aqueles usam a mesma sintaxe ... (Eu não posso nem imaginar como se pode ficar csh em primeiro lugar.)
Escreva seu scriptlet de configurações assim:
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"
Eu testei isso no bash 4.2.20, tcsh 6.17 e no traço 0.5.7.
Soluções um pouco mais sensatas:
Você pode manter as configurações como texto simples, assim:
-
~/tomcat/catalina-home
/mnt/apps/tomcat/6.0.20/linux
-
seus scripts bash
export CATALINA_HOME=$(< ~/tomcat/catalina-home) export CATALINA_BASE=$(< ~/tomcat/catalina-base)
-
seus scripts csh
setenv CATALINA_HOME "'cat ~/tomcat/catalina-home'" setenv CATALINA_BASE "'cat ~/tomcat/catalina-base'"
Você pode escrever um wrapper que configure o ambiente:
-
/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 "$@"
-
se você tivesse
myscript
, você executaria comotcat myscript args args args
Você poderia combinar as duas abordagens acima configurando um "diretório env" contendo os dados brutos e executando o seu script via envdir
de Dan Bernstein ou Gerrit Pape's 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