Не пытайтесь сделать один и тот же скрипт переносимым между двумя совершенно разными оболочками. Трудно добиться даже совместимости sh и bash, и они используют один и тот же синтаксис ... (Я даже не представляю, как можно стоять csh во-первых.)
Напишите ваш скрипт настройки следующим образом:
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 и dash 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
Dan Бернштейна или chpst
Gerrit Папе:
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