我正在尝试编写一个进程脚本以打开另外两个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
。
答案 0 :(得分:1)
Mintty将第一个参数视为命令名,包含因qoutes而传递的所有选项。由其他程序启动的程序参数(即sudo,screen等)通常作为单独的参数传递以避免解析,因此您应该尝试start mintty http-server $run_http_location -p $run_http_port
,不带引号。