2016-07-09 2 views
1

Я работаю над скриптом, чтобы создать вид четкого отображения и выполнить некоторые другие функции.Как передать параметры для вызова при вызове с помощью «exec» в сценарии bash

В функции setview, когда используется внутри сценария, для выполнения операций на представлении, формат рекомендуется команда

cleartool setview -exec "commands" view_name 

Для «команды», то я хочу использовать функцию, определенную в тот же сценарий оболочки перед этим вызовом. Кажется, что это не работает, когда я делаю следующее:

cleartool setview -exec "function_name(var1, var2)" view_name 

Итак, вопрос у меня есть: может быть функция используется с командой «ехес», и если это возможно, что синтаксис?

В одном из ответов SO в нем упоминается не использовать setview, а использовать startview. Поскольку я не знаю разницы между ними, и мне нужно выполнить другие действия в скрипте, я был бы признателен за любую помощь, если я не буду использовать setview exec mecxhanism.

Причина, по которой я пытаюсь использовать функцию вместо другого сценария оболочки, вызываемого из «exec», заключается в том, что при использовании функции мне не нужно экспортировать переменные, которые могут использоваться вызываемым скриптом, поскольку функция определяется в том же скрипте, который вызывает команду setview.

+0

Вы имеете в виду команду 'bash'' exec', или '-exec' для' cleartool'? – cdarke

+0

Не зная о том, как cleartool реализует опцию '-exec', кажется маловероятным, что вы сможете использовать функцию оболочки таким образом (или вообще). Поскольку cleartool - отдельная утилита, а не часть оболочки, она не имеет доступа к среде оболочки и может только реализовать опцию exec, создав новую подоболочку; в этой подоболочке функция не будет определена. (Bash позволяет экспортировать функции в bash subshells, но нет гарантии, что подоболочка, начатая cleartool, использует bash. И даже при этом вам нужно экспортировать все, включая функцию.) – rici

+0

@cdarke - я имею в виду '-exec 'option to' cleartool' – adbdkb

ответ

0

Как я уже говорил repeatedly по the past, никогда не используйте cleartool setview: это не стоит, так как это creates (fork) a sub-shell, который, в вашем случае, делает передачу параметров довольно сложно.
(те переменные, определенные в сценарии, не будут доступны в раздвоенной суб-оболочки)

Единственное преимущество setview это путь смонтированного зрения, которая начинается всегда с /vobs/avob/...

cleartool startview убеждается the dynamic view запускается, то есть acccessible через полный путь/вид/AView/ВОБ/avob/...
Смотри на «How to run multiple Unix commands in one shot»

Таким образом, ваш сценарий остается очень простой (но должен использовать полный путь представления, n ВЗ /vobs/...):

cleartool startview aview 
cd /view/aview(/vobs/avob/apth) 

function_name(var1, var2) 

при условии, я делаю startview подход, как я могу найти путь просмотра после создания представления в моем сценарии?

Путь динамического зрения всегда строится одинаково:

clearcase startview aViewX 
cd /view/aViewX/ 
     ^^^^^^ 
cleartool lsview -l -pro aViewX -cview 

Это последняя команда даст свой путь вид хранения. (см. «To find a view storage directory»)

+0

Спасибо. То, что я действительно хочу сделать, - это создать представление, скопировать файлы представлений и файлов просмотра ** на общий ресурс NAS (мне не удалось «создать представление» на общем ресурсе NAS) и ** удалить исходный вид ** , Итак, если я использую метод startview, как я могу найти путь к виду после создания представления в моем сценарии? Кроме того, я полагаю, мне придется делать остановку перед выполнением rmview. Это правильное предположение? – adbdkb

+0

@adbdkb Это совсем другой вопрос. Мой ответ был посвящен вашему первоначальному вопросу о том, как использовать startview и функцию в сценарии bash. Не стесняйтесь задавать другой вопрос, с более подробной информацией (ваша ОС, ваша версия ClearCase) – VonC

0

@adbkdb В разделе «Что я действительно хочу делать ...» Если вы не можете создать представление, было бы разумнее определить, почему вы не можете создать представление, создать + копию + удалить процесс. Существуют особые требования и особый процесс создания представления с хранилищем представлений NAS.

Если это представление UCM, а «копия» относится к фактическому.vws (в отличие от рабочей области представления моментального снимка), то удаление представления с помощью rmview делает копию бесполезной, поскольку теперь ассоциация потоков нарушена.

+0

Я знаю, что есть особые требования, и я не могу вносить изменения в окружающую среду - не под моим контролем. И все, что мне действительно волнует, - это возможность получить файлы вида. Я могу сделать это с помощью setview и использовать exec "" для setview. Поэтому, в интересах времени и доступности ресурсов и готовности изменить ситуацию, я собираюсь работать с моим оригинальным подходом. Но ответ/рекомендация VonC является допустимой альтернативой выполнению слишком многих вещей в части exec («причина, по которой я пытался сделать вызов функции»), и я собираюсь посмотреть, как добавить ее в мой скрипт. – adbdkb