Выполнить команду, не заставляя меня ждать

Я новичок в Shell Script Linux.
Я работаю над автоматизированным тестированием на Android, поэтому хочу запустить сценарий оболочки, как показано ниже:

  1. Начать запись экрана с помощью adb ( cmd1.sh )
  2. Проведите тестирование сценария, затем остановите/сохраните записанный файл (cmd2.sh)

К сожалению, когда я запускаю cmd1.sh, я ДОЛЖЕН ждать 3 минуты, прежде чем запустится cmd2.sh.
Это означает, что я не могу записать видео :sad:
Вот содержимое моей команды запуска:

Содержимое файла run.sh:

./cmd1.sh $
./cmd2.sh

Содержимое файла cmd1.sh:

Запись экрана оболочки adb /sdcard/file.mp4

Содержимое файла cmd2.sh:

calabash-android запустить приложение.apk

Наконец, я открываю терминал и запускаю команду:

./run.sh

Конечно, видео не может быть сохранено, потому что после завершения cmd1.sh запускается cmd2.sh !!!
Кто-нибудь может мне помочь в этом вопросе?
Большое спасибо !

@Jrican Обновлено
Вот ручной шаг, который я могу воспроизвести видеозапись.
1. ОТКРЫТЬ терминал A
2. Выполните команду 1 (Начать сценарий записи экрана)
3. Откройте другой терминал B, затем запустите команду 2
4. После завершения команды 2 вернитесь к терминалу A, затем нажмите Ctrl C .
5. Подтвердите видео в /sdcard/file.mp4, которое может воспроизводиться нормально

Я работаю над MAC OSX Yosemite 10.10.5.


person Bulma    schedule 07.10.2015    source источник
comment
Будет ли это работать? $ ./cmd1.sh и ./cmd2.sh   -  person Jrican    schedule 07.10.2015
comment
Спасибо ! Позвольте мне попробовать, а затем обновить вас в ближайшее время!   -  person Bulma    schedule 07.10.2015
comment
@Jrican: я пробовал. Но все равно НЕ работает. Ошибка: $: команда не найдена   -  person Bulma    schedule 07.10.2015
comment
не ставьте знак $ впереди, это было просто для представления командной строки.   -  person Jrican    schedule 07.10.2015
comment
./cmd1.sh и ./cmd2.sh   -  person Jrican    schedule 07.10.2015
comment
@Jrican Большое спасибо. Он работает нормально. Ты похож на моего кумира :)   -  person Bulma    schedule 07.10.2015
comment
@Jrican: Извините, как я могу убить / остановить cmd1 после завершения cmd2? Я имею в виду, что хочу ОСТАНОВИТЬ запись видео перед его сохранением...   -  person Bulma    schedule 07.10.2015
comment
fg %1 выведет первое задание на передний план, можете ли вы его там остановить? kill %1 убьет первое задание, но вы, вероятно, этого не хотите.   -  person Jrican    schedule 07.10.2015
comment
Вот процесс, который я хочу: 1. Начать запись с помощью cmd1 => 2. Выполнить автоматизацию тестирования с помощью cmd2 => (После завершения cmd2) Остановить cmd1 означает Остановить запись (обычно это Ctr + C) => Затем сохранить запись файла   -  person Bulma    schedule 07.10.2015
comment
попробуйте: fg %1 затем клавиши Ctrl+C   -  person Jrican    schedule 07.10.2015
comment
@Jrican: вот автоматизированное тестирование. Я не хочу использовать 'Ctrl C' :Sad: Пожалуйста, помогите мне подтвердить это? Благодарить   -  person Bulma    schedule 07.10.2015
comment
попробуйте: kill -SIGINT %1, также я превратил это в ответ, см. ниже.   -  person Jrican    schedule 07.10.2015
comment
Давайте продолжим обсуждение в чате.   -  person Jrican    schedule 07.10.2015


Ответы (2)


Простое решение: содержимое файла run.sh:

./cmd1.sh &          # run this command in the background
./cmd2.sh            # run this command to completion 
kill -SIGINT %1      # send the interrupt signal to the first command (ctrl+c)

Чуть более правильное решение: содержимое файла run.sh:

./cmd1.sh &            # run this command in the background
recPID=$!              # save the PID for this process for later
./cmd2.sh              # run this command to completion 
kill -SIGINT $recPID   # send the interrupt signal to the first command (ctrl+c)
person Jrican    schedule 07.10.2015
comment
Подтверждаю, почему не могу воспроизвести видео после сохранения. Я обновлю другой способ воспроизведения видео, о котором идет речь выше. - person Bulma; 07.10.2015

Чтобы запустить две команды одновременно, а затем убить PID первой команды после завершения второй команды:

#!/bin/sh

# Run first command in background:
./cmd1.sh & PID="$!"

# Run second command:
./cmd2.sh

# Kill the first command:
kill "$PID"
person Community    schedule 07.10.2015
comment
Я НЕ хочу ждать здесь. cmd1 означает начало записи. cmd2 означает сделать тестовый пример. Прежде всего, я хочу записать видео. Надеюсь, вы поняли мою проблему - person Bulma; 07.10.2015
comment
Я убрал временную задержку. Хотя я чувствую, что это все еще не решает вашу проблему. Я попробую установить эти пакеты на свой Android и посмотрю, смогу ли я воспроизвести вариант использования. - person ; 07.10.2015
comment
Спасибо . Ответ Джрикана исправлен. Но у меня есть еще одна проблема, которую я хочу убить / остановить Cmd1 после Cmd 2 Finish ??? - person Bulma; 07.10.2015
comment
Отредактировано так, чтобы убить первый процесс после завершения второго. - person ; 07.10.2015
comment
Я попробовал вашу команду. Мое видео все еще не может запуститься. Как я могу проверить, что я уже убил именно PID? Потому что, если я остановлю команду 1 с помощью CTR C , я смогу воспроизводить видео как обычно. Я думаю, что проблема возникла из-за невозможности убить cmd1 перед сохранением файла. - person Bulma; 07.10.2015