Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用bash在各自的选项卡中启动所有服务器_Python_Linux_Bash_Gnome Terminal - Fatal编程技术网

Python 使用bash在各自的选项卡中启动所有服务器

Python 使用bash在各自的选项卡中启动所有服务器,python,linux,bash,gnome-terminal,Python,Linux,Bash,Gnome Terminal,我有几个服务器正试图通过执行一个bash脚本来运行。我一点也不知道bash这是我第一次尝试编写脚本,但通过一点谷歌搜索,我把它拼凑在一起,成功了: #!/bin/bash gnome-terminal \ --tab -e \ 'sh -c "cd /path1 && ./server1; exec bash"' \ --tab -e \ 'sh -c "cd /path2 && ./server2; exec b

我有几个服务器正试图通过执行一个bash脚本来运行。我一点也不知道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"'
现在,我正在virtualenv中运行第一台python服务器,因此我希望能够给出一个命令行参数来决定加载哪个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
我想我在bash脚本中使用sh而不是bash来运行这些命令(
bash-c
不起作用),所以“源”是未知的,它也不理解变量
$virtualenv
,可能是出于同样的原因

显然,你可以使用
$@
推倒参数,我在这方面遇到了麻烦,但不管怎样,我认为我一开始做得都是错的。我真的不需要cd到路径,也不知道为什么要这样做,这样可以简化脚本


如果有人能以正确的方式了解bash,我将不胜感激。谢谢大家!

此脚本允许用户在同一工作目录中打开选项卡。(我有此脚本的别名,因此我可以键入别名以打开新选项卡。)……但是,请参见,您可以调用变量并执行操作。因此,可以以此为基础实现命令。此脚本适用于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

这显然是AppleScript,所以对我来说不可用,但我可以看看是否有类似的方法。可能是通过变量传递的
tell
命令的bash替代方法。