在bash脚本中使用“exec”调用时如何传递参数

时间:2016-07-09 12:24:35

标签: bash exec clearcase

我正在编写一个脚本来创建一个clearcase视图并执行其他一些功能。

在setview函数中,当在脚本中使用时,为了对视图执行操作,建议的命令格式为

cleartool setview -exec "commands" view_name

对于“命令”部分,我想在此调用之前使用在同一shell脚本中定义的函数。当我执行以下操作时似乎无效:

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

所以,我的问题是:函数是否可以与“exec”命令一起使用,如果可能,语法是什么?

在其中一个SO答案中,它提到不使用setview而是使用startview。由于我不知道两者之间的区别,我需要在脚本中执行其他操作,如果我不应该使用setview exec mecxhanism,我将不胜感激。

我试图使用函数而不是从“exec”调用的另一个shell脚本的原因是,当使用函数时,我不必导出被调用脚本可以使用的变量,因为函数是在调用setview命令的同一脚本中定义。

2 个答案:

答案 0 :(得分:0)

正如我在repeatedly上所说the past一样,永远不要使用cleartool setview:它不值得,因为它creates (fork) a sub-shell,在你的情况下,它通过参数相当困难。
(在脚本中定义的那些变量不能在分叉的子shell中访问)

setview唯一的优点是已挂载视图的路径,始终以/vobs/avob/...

开头

cleartool startview确保the dynamic view已启动,可通过其完整路径/ view / aview / vobs / avob / ...进行访问 请参阅" How to run multiple Unix commands in one shot"

这样,您的脚本仍然非常简单(但必须使用视图的完整路径,而不是/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")

答案 1 :(得分:0)

@adbkdb关于"我真正想做的事情......"如果您无法创建视图,那么确定创建视图的原因比创建+复制+删除过程更有意义。使用NAS驻留视图存储创建视图有特定要求和特定过程。

如果这是一个UCM视图,那么" copy"指的是实际的.vws目录(与快照视图工作区相对),然后使用rmview删除视图会使副本无效,因为流关联现在已被破坏。