2

当我从 bash 以交互方式运行以下代码时,它工作正常。

cleartool setview $myview
cleartool lsbl

但是当我将它们放入脚本并尝试运行脚本时,它永远不会从第一个 cleartool 命令返回。

在交互式情况下,第一个 cleartool 命令似乎打开了一个新的 bash 来运行,当您从新的 shell 运行第二个命令时,它工作正常。但是在脚本的情况下,新的外壳是不可见的,因此它似乎不会从命令返回。

有没有办法将 cleartool 命令保存在它们运行的​​同一个 bash shell 中?

4

2 回答 2

8

cleartool setview命令打开一个新的交互式 shell。在该 shell 中,当您手动键入第二个命令时,您将执行它。当您将这两行都放入脚本时,将setview执行等待您输入的 shell。第二个命令在您退出该 shell 后立即执行。当然,第二个命令不会在$myview.

为了让事情更清楚一点,请执行以下操作: 在 shell 中执行cleartool setview $myview五次。在echo $$每个setview. 这为您提供了当前 shell 的进程 ID。人数会增加。然后输入exit每个shell。每次之后再做echo $$一次exit。旧号码将以降序显示。六秒后exit,您的终端应关闭。

这就是解释。您的问题的解决方案可能是命令的-exec选项setview

cleartool setview $myview -exec "cleartool lsbl"

应该做的伎俩。

于 2011-09-30T21:13:54.880 回答
5

虽然它没有直接回答问题,但以下内容可能会满足您的需求。它使第二个命令在第一个命令打开的子 shell 中运行。

cleartool setview $myview << EOF
cleartool lsbl
EOF
于 2011-09-30T21:15:38.063 回答