0

我正在制作一种部署脚本。它是一个非常简单的基于 git pull 的部署。我需要它接受两个参数:要部署的应用程序和服务器类型(暂存、测试、生产)。所以我为每个应用程序编写了一个函数的脚本

./deploy.sh <appname> <server>

--

#deploy.sh
app1(){
        echo $2 #Empty
        cd /srv/www/app1/$2 #


        git pull origin master

}
case $1 in
        "app1") app1;;
esac

现在,当我使用以下命令运行脚本时./deploy.sh app1 staging。该脚本仅导航到该/srv/www/app1目录,而不是/srv/www/app1/staging 当我回显 $2 时,没有显示任何内容。我究竟做错了什么?

4

2 回答 2

2

问题是当你使用它时$2app1它试图解释传递给app1它的参数是空的,所以你需要将它作为参数传递给app1. 尝试这个:

app1(){
        echo $1 #Empty
        cd /srv/www/app1/$1 #


        git pull origin master

}
case $1 in
        "app1") app1 $2;;
esac
于 2013-10-02T17:01:26.107 回答
0

查看范围。shell 脚本中的每个函数都可以传递参数。该app()函数正在寻找 $2 作为其自身的参数。没有传递任何参数,因此 $2 等于“”。如果您使用下面的脚本,您应该没问题,在这种情况下将 $2 传递给 app1。

#deploy.sh
app1(){
        echo $1 #Empty
        cd /srv/www/app1/$1 #


        git pull origin master

}
case $1 in
    "app1") app1 $2 ;;
esac
于 2013-10-02T17:03:08.460 回答