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

Shell command to open other shells and run commands

我正在尝试编写一个进程来打开另外两个 shell windows 并将命令发送给它们 运行 我已经安装的一些节点模块。这是我第一次编写 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 -gstartdev -g -h 到 运行 这个。

一切正常,我想补充一点,当它打开 shell 并发送 gulp 命令时,它会检测到我的 gulp 文件并能够 运行 就像我想要的那样,它的默认任务。然而,http 服务器并没有做同样的事情,它只是告诉我 http-server ./ -p 8111: No such file or directory.

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