4

В моей среде (RHEL) у меня есть несколько скриптов, написанных на csh или bash.

Некоторые из них используются для работы с сервером Tomcat.

Я хочу сохранить определения CATALINA_HOME и CATALINA_BASE в одном месте, чтобы сценарии csh и bash могли получать переменные из одного файла.

Я более знаком с bash и очень ограниченно знаком с csh. Так что для скриптов bash это то, что я буду делать:

. ~/tomcat.settings

А в tomcat.settings у меня будет

export CATALINA_HOME=/mnt/apps/tomcat/6.0.20/linux
export CATALINA_BASE=/home/app1/server

Как я могу получить исходный код из того же файла в csh?

1 ответ1

7

Не пытайтесь сделать один и тот же скрипт переносимым между двумя совершенно разными оболочками. Трудно добиться даже совместимости 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .