2014-09-13 35 views
0

開始每個我所有的服務器在自己的標籤,我有幾個服務器,我試圖通過執行一個bash腳本來運行。我不知道在bash的這一切是我的腳本,而是通過Google檢索我砍死這個共同的第一次嘗試,它的工作:使用bash

#!/bin/bash 

gnome-terminal \ 
    --tab -e \ 
     'sh -c "cd /path1 && ./server1; exec bash"' \ 
    --tab -e \ 
     'sh -c "cd /path2 && ./server2; exec bash"' \ 
    --tab -e \ 
     'sh -c "cd /path3 && ./server3; exec bash"' \ 
    --tab -e \ 
     'sh -c "cd /path4 && java -jar javaserver; exec bash"' 

現在我運行的第一個Python服務器中的virtualenv這樣我希望能夠給一個命令行參數來決定哪些VIRTUALENV加載(或使用默認值),所以我一直是這樣的:

#!/bin/bash 

if [ -z "$1" ] 
    then 
    virtualenv="default" 
    else 
    virtualenv=$1 
fi 

gnome-terminal \ 
    --tab -e \ 
     'sh -c "cd /path1 && source ../$virtualenv/bin/activate && ./server1; exec bash"' \ 
    --tab -e \ 
     'sh -c "cd /path2 && ./server2; exec bash"' \ 
    --tab -e \ 
     'sh -c "cd /path3 && ./server3; exec bash"' \ 
    --tab -e \ 
     'sh -c "cd /path4 && java -jar javaserver; exec bash"' 

因爲我做sh -c我想我中號用sh而不是bash的我的bash腳本內(bash -c不工作),這樣的「源」運行這些命令是未知的,也是不理解變量$virtualenv可能出於同樣的原因。

顯然你可以用[email protected]來推翻參數,但我無論如何都會這樣做,我認爲我在第一時間做的都是錯誤的。我並不真的需要cd到路徑要麼不知道爲什麼我這樣做,可以簡化腳本。

我從別人誰知道居然在這樣做的正確方法的bash欣賞手。謝謝!

回答

0

這個腳本允許一個開在相同的工作目錄中的標籤。(我對這個劇本的別名,讓我輸入別名打開一個新的標籤頁。)......但是你看,你可以調用在變量中並執行操作。因此,你可以使用這個作爲基礎來實現你的命令。這個腳本是UNIX/Mac上,但我想它可能仍然是有用的。

#!/bin/sh 

pwd=`pwd` 
osascript -e "tell application \"Terminal\"" \ 
    -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \ 
    -e "do script \"cd $pwd; clear\" in front window" \ 
    -e "end tell" 
    > /dev/null 
+1

這是AppleScript顯然,所以不適用於我,但我可以看到是否有類似的方法。可能是通過變量傳遞的'tell'命令的bash選項。 – 2014-09-14 16:01:44