在不让我等待的情况下运行命令

时间:2015-10-07 01:51:30

标签: linux shell terminal sh calabash

我是Shell Script Linux的新手 我正在使用Android进行自动化测试,所以我想在下面运行一些shell脚本:

  1. 按adb(cmd1.sh)
  2. 开始录制屏幕
  3. 执行方案测试然后停止/保存录制的文件(cmd2.sh)
  4. 不幸的是,当我运行cmd1.sh时,我必须等待3分钟才能运行cmd2.sh 这意味着我无法录制视频:伤心:
    这是我的运行命令内容:

    run.sh 文件内容:

      

    ./ cmd1.sh $
      ./cmd2.sh

    cmd1.sh 文件内容:

      

    adb shell screenrecord /sdcard/file.mp4

    cmd2.sh 文件内容:

      

    calabash-android运行app.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

2 个答案:

答案 0 :(得分:3)

简易解决方案: 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)

答案 1 :(得分:1)

同时运行两个命令,然后在第二个命令完成后终止第一个命令的PID:

#!/bin/sh

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

# Run second command:
./cmd2.sh

# Kill the first command:
kill "$PID"