Как запустить несколько команд Unix за один выстрел

Я пытаюсь выполнить несколько команд за один выстрел, но, к моему удивлению, выполняется только первая команда, а остальные пропускаются. И команда

cleartool setview view1234 ; cleartool setactivity activity456 ; cd /vobs/app/src/epw/WEB-INF/scripts ; pwd

И вывод приведенной выше команды

You can now run 'clearquest' to start Rational ClearQuest.

Но вместо этого я ожидаю увидеть следующие 3 строки вывода:

You can now run 'clearquest' to start Rational ClearQuest.
Set activity "activity456" in view "view1234".
/vobs/app/src/epw/WEB-INF/scripts

В результате моих поисков я получил еще несколько вариантов для одной и той же команды, заменив точку с запятой (;) на амперсанд (&) или трубу (|), но ничего не помогло.

Любые предложения / идеи о том, как запустить несколько команд, как указано выше?

3 ответа

Не использовать cleartool setview: он разветвляет текущую оболочку в подоболочке, поэтому остальная часть пропускается при выполнении в одну строку.
И именно поэтому он работает, когда выполняется один за другим (последние два выполняются в подоболочке)

Всегда работайте с полным путем динамического представления: /view/aview/vobs/avob/..., вместо setview (который вам не нужен).

Если вы должны использовать cleartool setview затем используйте его вместе с -exec вариант ( как в этом ответе):

cleartool setview -login -exec "command 1; command 2; command 3" view_tag

В твоем случае:

cleartool setview -exec 'cleartool setactivity activity456 ; cd /vobs/app/src/epw/WEB-INF/scripts ; pwd' view1234 

Без setview:

ОП спрашивает:

Скажи мой взгляд по имени humanbeing в universe/planet/earth/humanbeing.vws

Как я могу использовать startview команда?
Это что-то вроде

cleartool startview universe/planet/earth/humanbeing

или же

cleartool startview cd universe/planet/earth/humanbeing

В обоих случаях говорится об ошибке: не удалось установить тег просмотра universe/planet/earth/humanbeing

Чтобы быть уверенным, сделать cleartool lsview -s | grep humanbeing: это даст вам тег просмотра.

Которые должны быть:

cleartool startview humanbeing
cd /view/humanbeing/vobs/<avob>

universe/planet/earth/humanbeing.vws является хранилищем представления, а не тегом представления.

Удостоверься что

  • установлен (cleartool mount /vobs/avob)
  • myapp/WEB-INF/scripts присутствует в /view/humanbeing/vobs/<avob>

Не пытайтесь делать какие-либо ссылки в /vobs: /vobs является специальной точкой монтирования MVFS (Multi-Version FileSystem), а не обычной папкой.
Убедитесь, что ваше веб-приложение ищет приложения по другому пути, чем /vobs,

Я не уверен, что именно вы пытаетесь сделать, так как это кажется частью большого проблемного пространства, но...

cleartool setact -view view1234 activity456 

работает, чтобы установить активность в представлении, затем

cd /view/view1234/vobs/app/src/epw/WEB-INF/scripts

доставит вас туда. Или сложите их вместе, чтобы получить свой результат:

cleartool setact -view view1234 activity456 && cd /view/view1234/vobs/app/src/epw/WEB-INF/scripts && pwd

Заявление <stmt1> && <stmt2> это сокращение для if [[ <stmt1> ]]; then <stmt2>

См. Справочную страницу KSH для получения дополнительной информации о выполнении Unix-команд "за один раз".

Точка с запятой (;) вызывает последовательное выполнение предыдущего конвейера; амперсанд (&) вызывает асинхронное выполнение предыдущего конвейера (т. е. оболочка не ожидает завершения этого конвейера). Символ |& вызывает асинхронное выполнение предыдущего конвейера с двусторонним каналом, установленным в родительскую оболочку; ... Символ && ( | |) приводит к выполнению списка, следующего за ним, только если предыдущий конвейер возвращает нулевое (ненулевое) значение.

У меня нет доступа к Clearcase, чтобы попробовать что-то, но иногда из прошлого опыта вам понадобится RTFM, такие инструменты, которые принимают либо обратный канал, либо файл сценария ввода, ищут в документации синтаксис, такой как:

Cleartool < echo command_sequence

echo command_sequence | Cleartool - или же

Cleartool -f входной файл или последовательность команд или

Cleartool -c входной файл или последовательность команд или

Cleartool run входной файл или последовательность команд или

Если вы обнаружите, что какой-либо из вариантов выше, делает свое дело, пожалуйста, сообщите нам об этом, разместив свой собственный ответ, чтобы следующий человек с проблемой мог получить выгоду.

Другие вопросы по тегам