2016-08-10 6 views
0

я собирался в рамках проекта, и я видел, есть два сценария:Run Баш команды и CSH команд в одном сценарии

один работает в Баш и других в CSH.

Есть ли способ объединить оба файл и запустить как единый сценарий, и только один файл, означает, что после объединения не должен быть ранее файлами? Это уменьшает размер кода и будет более удобным для пользователя.

Например:

#!/bin/sh 

setenv PROJ_ROOT $PWD 
setenv PROJ_OS freebsd 
setenv OS freebsd 

#!/bin/csh 
export ICP=`pwd` 

#both /sh 
if `uname -r | grep -c "10.2-RELEASE"` == 1 setenv PROJ_WITHOUT_THREAD 1 
+0

Для начала с выражением if в конце синтаксически неправильно. Не уверен, что вы пытаетесь сделать здесь. Не могли бы вы перефразировать вопрос, чтобы он стал яснее? – sjsam

+0

Последнее «если» проверяет версию ОС, что если ее 10.2-Release, установите эту переменную, вот и все. Я не думаю, что для уточнения требуется больше. –

ответ

1

Ваш пример сценария не имеет смысла, так или иначе; сценарий оболочки не может устанавливать переменные в своем родительском процессе.

Для поверхностного взлома совместимости вы можете объявить функцию setenv; то большая часть вашего примера скрипта будет работать в sh.

setenv() { 
    "$1"=$2 
    export "$1" 
} 

Ваше положение if я считаю, будет синтаксической ошибкой в ​​обеих оболочках. Я не могу придумать, как это сделать, но моя рекомендация заключалась бы в том, чтобы отказаться от csh.

+0

Я знаю, что это не имеет никакого смысла, но ситуация приходит, я спросил о возможности, которая может добавить к моим знаниям. :) –