如何在Docker中创build一个bash脚本文件?

我写了一个脚本,任务是创build一个文本文件并写入两行。

这已经完成,但不止一次,我不明白为什么,因为脚本文件不包含任何循环,一旦文件执行。

#!/bin/bash <other, non-relevant variables and commands> PHP_ROOT_DIR=/etc/php-5.6.22 PHP_CGI_WRAPPER=php-5622 mkdir -p $(dirname $0)/cgi-bin touch $(dirname $0)/cgi-bin/$PHP_CGI_WRAPPER echo -e "#!/bin/bash" >> $(dirname $0)/cgi-bin/$PHP_CGI_WRAPPER echo -e "exec ${PHP_ROOT_DIR}/bin/php-cgi" >> $(dirname $0)/cgi-bin/$PHP_CGI_WRAPPER <other, non-relevant variables and commands> exit 0 

输出文件内容:

 #!/bin/bash exec /etc/php-5.6.22/bin/php-cgi #!/bin/bash exec /etc/php-5.6.22/bin/php-cgi #!/bin/bash exec /etc/php-5.6.22/bin/php-cgi 

更新:

运行Docker容器时会出现此结果。

如果我将脚本简化为只包含以上部分(删除不相关的代码部分),然后在主机操作系统和Docker中正确工作。

但问题仍然没有解决。

完整版本的脚本文件是这样的:

 #!/bin/bash source $(dirname $0)/create_vhost_config.sh source $(dirname $0)/create_sample_html.sh IP=$(ip route get 1 | awk '{print $NF;exit}') SRC_DIR=/usr/local/src HTTPD_VERSION=2.4.20 HTTPD_ROOT_DIR=/etc/apache2 HTTPD_CONF_FILE=/etc/apache2/conf/apache2.conf PHP_VERSION=5.6.22 PHP_ROOT_DIR=/etc/php-5.6.22 PHP_CGI_WRAPPER=php-5622 for i in 1 2 do mkdir -p /var/www/vhosts/test$i/public mkdir -p /var/www/vhosts/test$i/log create_html ${IP} "test$i" "/var/www/vhosts/test$i/public/index.html" create_php_info "/var/www/vhosts/test$i/public/index.php" create_simple_vhost "test$i" "$HTTPD_ROOT_DIR/conf/conf.d/test$i.home.conf" done # add PHP handler to Apache configuration sed -i -e 's@ DirectoryIndex index.html@ DirectoryIndex index.php index.html@g' $HTTPD_CONF_FILE echo -e "\n<FilesMatch \"\.php$\">" >> $HTTPD_CONF_FILE echo -e "\tSetHandler application/x-httpd-php" >> $HTTPD_CONF_FILE echo -e "</FilesMatch>" >> $HTTPD_CONF_FILE $HTTPD_ROOT_DIR/bin/apachectl restart # *************************************** Creating PHP-CGI wrappers *************************************** mkdir -p /var/www/cgi-bin touch /var/www/cgi-bin/$PHP_CGI_WRAPPER echo -e "#!/bin/bash" >> /var/www/cgi-bin/$PHP_CGI_WRAPPER echo -e "exec ${PHP_ROOT_DIR}/bin/php-cgi" >> /var/www/cgi-bin/$PHP_CGI_WRAPPER #restart apache chmod -R +x /var/www/cgi-bin/ # *************************************** Configure with mod_cgi/mod_cgid *************************************** sed -i -e 's@#LoadModule cgid_module modules/mod_cgid.so@LoadModule cgid_module modules/mod_cgid.so@g' $HTTPD_CONF_FILE sed -i -e 's@#LoadModule actions_module modules/mod_actions.so@LoadModule actions_module modules/mod_actions.so@g' $HTTPD_CONF_FILE echo -e "\nScriptAlias /php/ /var/www/cgi-bin/" >> $HTTPD_CONF_FILE echo -e "<Directory /var/www/cgi-bin/>" >> $HTTPD_CONF_FILE echo -e "\tRequire all granted" >> $HTTPD_CONF_FILE echo -e "</Directory>" >> $HTTPD_CONF_FILE rm -rf $HTTPD_ROOT_DIR/conf/conf.d/* for i in 1 2 do create_mod_cgi_conf "test$i" "/php/php-5622" "$HTTPD_ROOT_DIR/conf/conf.d/test$i.home.conf" done $HTTPD_ROOT_DIR/bin/apachectl restart # *************************************** Configure with mod_fcgid *************************************** cd $SRC_DIR wget http://xenia.sote.hu/ftp/mirrors/www.apache.org//httpd/mod_fcgid/$(wget -O- http://xenia.sote.hu/ftp/mirrors/www.apache.org//httpd/mod_fcgid/ | egrep -o 'mod_fcgid-[0-9\.]+.tar.gz' | sort -V | tail -1) tar -xf mod_fcgid-[0-9].[0-9].[0-9].tar.gz cd mod_fcgid-[0-9].[0-9].[0-9] APXS=/etc/apache2/bin/apxs ./configure.apxs make -j"$(nproc)" make install rm -rf $HTTPD_ROOT_DIR/conf/conf.d/* for i in 1 2 do create_mod_fcgid_conf "test$i" "php-5622" "$HTTPD_ROOT_DIR/conf/conf.d/test$i.home.conf" done $HTTPD_ROOT_DIR/bin/apachectl restart # Configure with FPM find /var/www/vhosts/test*/public/ -exec chown daemon:daemon {} + sed -i -e 's@#LoadModule proxy_module modules/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@g' $HTTPD_CONF_FILE sed -i -e 's@#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@g' $HTTPD_CONF_FILE echo "include=etc/fpm.d/*.conf" >> $PHP_ROOT_DIR/etc/php-fpm.conf cp $SRC_DIR/php-$PHP_VERSION/sapi/fpm/init.d.php-fpm $PHP_ROOT_DIR/sbin/php-fpmd chmod 0700 $PHP_ROOT_DIR/sbin/php-fpmd find /var/www/vhosts/test*/public/ -exec chown www-data:www-data {} + rm -rf $PHP_ROOT_DIR/etc/fpm.d/* rm -rf $HTTPD_ROOT_DIR/conf/conf.d/* for i in 1 2 do create_php_fpmd_conf "test$i.home" "$IP" 5000$i "$PHP_ROOT_DIR/etc/fpm.d/test$i.home.conf" create_fpm_conf "test$i" "$IP" 5000$i "$HTTPD_ROOT_DIR/conf/conf.d/test$i.home.conf" done $HTTPD_ROOT_DIR/bin/apachectl restart $PHP_ROOT_DIR/sbin/php-fpmd start # install Composer for PHP cd /tmp $PHP_ROOT_DIR/bin/php -r "readfile('https://getcomposer.org/installer');" | $PHP_ROOT_DIR/bin/php mv composer.phar /usr/local/bin/composer $HTTPD_ROOT_DIR/bin/apachectl restart $PHP_ROOT_DIR/sbin/php-fpmd restart #install PHP-PEAR cd $SRC_DIR && \ wget http://pear.php.net/go-pear.phar -O go-pear.phar $PHP_ROOT_DIR/bin/php go-pear.phar $HTTPD_ROOT_DIR/bin/apachectl restart $PHP_ROOT_DIR/sbin/php-fpmd restart #install XDebug setterm -bold on cd $SRC_DIR wget https://xdebug.org/files/$(wget -O- https://xdebug.org/files/ | egrep -o 'xdebug-[0-9\.]+.tgz' | sort -V | tail -1) tar -xvf xdebug-[0-9].[0-9].[0-9].tgz cd xdebug-[0-9].[0-9].[0-9] $PHP_ROOT_DIR/bin/phpize ./configure --enable-xdebug --with-php-config=$PHP_ROOT_DIR/bin/php-config make -j"$(nproc)" make install echo $(find / -type d -name no-debug-zts*)/xdebug.so >> $PHP_ROOT_DIR/etc/php.ini $HTTPD_ROOT_DIR/bin/apachectl restart $PHP_ROOT_DIR/sbin/php-fpmd restart exit 0 

改变这个:

echo -e "#!/bin/bash" >> $(dirname $0)/cgi-bin/$PHP_CGI_WRAPPER

对此:

echo -e "#!/bin/bash" > $(dirname $0)/cgi-bin/$PHP_CGI_WRAPPER

IOredirect

Interesting Posts