2014-09-20 135 views
1

目前我正在製作一個Java應用程序。爲了測試它,我必須運行一個服務器,然後運行一個客戶端。運行終端腳本執行一個命令,當該命令運行時,打開一個新標籤並運行另一個命令

所以,我想這個使用bash腳本來運行:

#!/bin/bash 
clear 
gradle runServer 
osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' 
gradle runClient 

問題:運行時並沒有結束,直到你關閉遊戲服務器,所以接下來的兩個命令不會執行。我怎樣才能同時/同時運行它們

回答

0

在後臺運行服務器,然後在腳本完成後將其終止。

下面是一個簡單的HTTP服務器和客戶端的例子。

#!/bin/bash 

date > foo.txt 
python -m SimpleHTTPServer 1234 & 
SERVER_PID="${!}" 
# Automatically terminate server on script exit 
trap 'kill "${SERVER_PID}"' 0 1 2 3 15 

# Wait for server to start 
while ! netstat -an -f inet | grep -q '\.1234 '; do 
    sleep 0.05 
done 

# Run client 
curl -s http://localhost:1234/foo.txt 

在另一個選項卡中運行會變得更加複雜;這會交錯客戶端和服務器的輸出。

$ ./doit.sh 
127.0.0.1 - - [19/Sep/2014 23:00:32] "GET /foo.txt HTTP/1.1" 200 - 
Fri 19 Sep 2014 23:00:32 MDT 

注意從HTTP服務器輸出的日誌,並從HTTP客戶端的輸出。之後服務器自動終止。