2014-09-13 16 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