ClearCase: это ошибка или особенность? - PullRequest
2 голосов
/ 01 октября 2011

Когда я запускаю следующий код из bash, он работает нормально.

cleartool setview $myview
cleartool lsbl

Но когда я помещаю их в скрипт и пытаюсь запустить скрипт, он никогда не возвращается из первой команды cleartool.1004 *

Кажется, что в интерактивном случае первая команда cleartool открывает новый bash для запуска, и когда вы запускаете вторую команду из новой оболочки, она работает нормально.Но в случае сценария новая оболочка не видна и, следовательно, она не возвращается из команды.

Есть ли способ сохранить команды cleartool в той же оболочке bash, из которой они запущены?

Ответы [ 2 ]

8 голосов
/ 01 октября 2011

Команда cleartool setview открывает новую интерактивную оболочку.В этой оболочке вы выполняете вторую команду, когда вводите ее вручную.Когда вы помещаете обе строки в скрипт, setview запускает оболочку в ожидании вашего ввода.Вторая команда выполняется, как только вы выходите из этой оболочки.Конечно, вторая команда не выполняется в контексте $myview.

Чтобы сделать вещи более понятными, сделайте следующее: В оболочке выполните cleartool setview $myview пять раз.Введите echo $$ после каждого setview.Это дает вам идентификатор процесса текущей оболочки.Числа будут увеличиваться.Затем введите exit в каждой оболочке.Делайте echo $$ снова после каждого exit.Старый номер будет отображаться в порядке убывания.Через шесть exit с ваш терминал должен быть закрыт.

Это было объяснением.Решением вашей проблемы может быть опция -exec команды setview:

cleartool setview $myview -exec "cleartool lsbl"

должна сработать.

5 голосов
/ 01 октября 2011

Хотя это не дает прямого ответа на вопрос, следующее может сделать то, что вы хотите.Он запускает вторую команду в подоболочке, которую открывает первая команда.

cleartool setview $myview << EOF
cleartool lsbl
EOF
...