Shell命令打开其他shell并运行命令

时间:2016-03-09 21:33:45

标签: bash npm mintty

我正在尝试编写一个进程脚本以打开另外两个shell窗口并向它们发送命令以运行我已安装的一些节点模块。这是我第一次做bash脚本,所以如果我搞砸了,请随时告诉我。

我有这个脚本

#!/bin/bash

# [-g]
# [-h]
# [-l <location to start the http-server on --default ./>]
# [-p <port to start the http-server on --default "8111">]

run_gulp=false
run_http=false
run_http_port=8111
run_http_location=./

while getopts ghl:p: opt; do
    case $opt in
        g)
            run_gulp=true
            ;;
        h)
            run_http=true
            ;;
        l)
            run_http_location=$OPTARG
            ;;
        p)
            run_http_port=$OPTARG
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            ;;
    esac
done

if [ $run_gulp == true ]
then
    start mintty "gulp" # this works
fi

if [ $run_http == true ]
then    
    start mintty "http-server $run_http_location -p $run_http_port"
fi

我把它放在一个名为startdev的文件中,该文件位于我的PATH变量上(我在Windows 10上),所以我可以从任何地方打开一个shell并键入startdev -g或{{1运行它。

这一切都很有效,我可以补充说,当它打开shell并发送gulp命令时,它会检测到我的gulpfile并能够像我想要的那样在其上运行默认任务。但是,http-server并没有做同样的事情,只是告诉我startdev -g -h

1 个答案:

答案 0 :(得分:1)

Mintty将第一个参数视为命令名,包含因qoutes而传递的所有选项。由其他程序启动的程序参数(即sudo,screen等)通常作为单独的参数传递以避免解析,因此您应该尝试start mintty http-server $run_http_location -p $run_http_port,不带引号。