试图用shell脚本自动化一些东西。
操作系统: 苹果
想要实现这样的事情:
script.sh
cd foo
yarn start
cd ..
cd bar
yarn start
cd ..
cd foobar
./start.sh
cd ..
cd boofar
docker-compose up
cd ..
echo "Go to your localhost and see your webapp working!!"
但是这些命令直到我点击^C
才会停止.
这样的事情可能吗? 我尝试使用&&
,;
等,但似乎找不到正确的组合。另外,查看screen
以打开多个窗口,但我似乎也无法正确处理。
我认为您打算将每个子命令放入后台。为此,请在每个命令的末尾添加一个与号。如果这些子进程正在写入 stdout/stderr,您应该在它们前面加上"nohup"并将输出重定向到某种形式的日志文件:
#!/bin/bash
cd foo
nohup yarn start > {/log/file1} &
cd ..
cd bar
nohup yarn start > {/log/file2} &
cd ..
cd foobar
nohup ./start.sh > {/log/file3} &
cd ..
cd boofar
nohup docker-compose up > {/log/file4} &
cd ..
echo "Go to your localhost and see your webapp working!!"
您还可以将常用功能放在函数中,以使整个脚本更具可读性:
#!/bin/bash
function start_child() {
cd "${1}"
logfile="${2}"
shift 2
nohup "${@}" > ${logfile} &
cd ..
}
start_child foo /log/file1 yarn start
start_child bar /log/file2 yarn start
start_child foobar /log/file3 ./start.sh
start_child boofar /log/file3 docker-compose up
echo "Go to your localhost and see your webapp working!!"
注意:如果任何子进程尝试从终端读取输入,则它们将挂起。