我在server.sh文件中有一个bash脚本
#!/usr/bin/env bash
function start {
docker-compose up -d --build && docker exec php bash -c "composer install; vendor/bin/phinx migrate" && \
docker exec web bash -c "cd web; npm install; pm2 start node_modules/react-scripts/scripts/start.js --name web"
}
function stop {
docker-compose down
}
export -f start stop
我想从
等命令行调用这些函数$./server.sh start
$./server.sh stop
这可能吗?现在它什么也没做
答案 0 :(得分:2)
您的脚本会忽略其命令行参数,因此将其传递给start
或stop
是毫无意义的。
它唯一要做的就是定义(并出于某种原因导出)两个函数,因此在单独的shell中运行它什么也没做。
您可以做的是在当前shell中获取脚本:
. ./server.sh
然后,您将有两个可用的功能可以运行:
start
和
stop
(均在当前shell中)。
如果您希望它以不同的方式工作,则必须重新设计Shell脚本。
答案 1 :(得分:1)
您不能像这样使用export -f start stop
。
这里是一个很好的线程,解释了如何使用它:
https://unix.stackexchange.com/questions/22796/can-i-export-functions-in-bash
如果您希望从命令行调用start / stop方法,则必须像这样公开它:
#!/usr/bin/env bash
function start {
docker-compose up -d --build && docker exec php bash -c "composer install; vendor/bin/phinx migrate" && \
docker exec web bash -c "cd web; npm install; pm2 start node_modules/react-scripts/scripts/start.js --name web"
}
function stop {
docker-compose down
}
if [[ "$1" == "start" ]]; then
start
fi
# [... same idea for the stop one ...]
然后将其命名为$ ./server.sh start
这是一个示例,因为有更有效的方法来管理参数。
希望这会给您一些见识。