Estoy tratando de usar el siguiente script para generar un mapa del sitio para mi sitio web. Cuando lo ejecuto, sh thsitemap.shaparece un error como este y crea un archivo sitemap.xml vacío:
thsitemap.sh: 22: thsitemap.sh: [[: not found
thsitemap.sh: 42: thsitemap.sh: [[: not found
thsitemap.sh: 50: thsitemap.sh: Syntax error: "(" unexpected
Pero como el mismo usuario rootcuando copio y pego manualmente estas líneas en el terminal, funciona sin ningún error y el archivo sitemap.xml tiene todas las URL. ¿Cuál es el problema? ¿Cómo puedo arreglar esto?
#!/bin/bash
##############################################
# modified version of original http://media-glass.es/ghost-sitemaps/
# for ghost.centminmod.com
# http://ghost.centminmod.com/ghost-sitemap-generator/
##############################################
url="techhamlet.com"
webroot='/home/leafh8kfns/techhamlet.com'
path="${webroot}/sitemap.xml"
user='leafh8kfns'       # web server user
group='leafh8kfns'      # web server group
debug='n' # disable debug mode with debug='n'
##############################################
date=`date +'%FT%k:%M:%S+00:00'`
freq="daily"
prio="0.5"
reject='.rss, .gif, .png, .jpg, .css, .js, .txt, .ico, .eot, .woff, .ttf, .svg, .txt'
##############################################
# create sitemap.xml file if it doesn't exist and give it same permissions
# as nginx server user/group
if [[ ! -f "$path" ]]; then
    touch $path
    chown ${user}:${group} $path
fi
# check for robots.txt defined Sitemap directive
# if doesn't exist add one
# https://support.google.com/webmasters/answer/183669
if [ -f "${webroot}/robots.txt" ]; then
SITEMAPCHECK=$(grep 'Sitemap:' ${webroot}/robots.txt)
    if [ -z "$SITEMAPCHECK" ]; then
    echo "Sitemap: http://${url}/sitemap.xml" >> ${webroot}/robots.txt
    fi
fi
##############################################
echo "" > $path
# grab list of site urls
list=`wget -r --delete-after $url --reject=${reject} 2>&1 |grep "\-\-"  |grep http | grep -v 'normalize\.css' | awk '{ print $3 }'`
if [[ "$debug" = [yY] ]]; then
    echo "------------------------------------------------------"
    echo "Following list of urls will be submitted to Google"
    echo $list
    echo "------------------------------------------------------"
fi
# put list into an array
array=($list)
echo "------------------------------------------------------"
echo ${#array[@]} "pages detected for $url" 
echo "------------------------------------------------------"
# formatted properly according to
# https://support.google.com/webmasters/answer/35738
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<urlset xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">" > $path
echo ' 
   ' >> $path;
   for ((i=0;i<${#array[*]};i++)); do
echo "<url>
    <loc>${array[$i]:0}</loc>
    <lastmod>$date</lastmod>
    <changefreq>$freq</changefreq>
    <priority>$prio</priority>
</url>" >> $path
   done
echo "" >> $path
echo "</urlset>" >> $path
# notify Google
# URL encode urls as per https://support.google.com/webmasters/answer/183669
if [[ "$debug" = [nN] ]]; then
    wget  -q --delete-after http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2F${url}%2Fsitemap.xml
    rm -rf ${url}
else
    echo "wget  -q --delete-after http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2F${url}%2Fsitemap.xml"
    echo "rm -rf ${url}"
fi
echo "------------------------------------------------------"
exit 0
                
                    
                        bash
                                shell
                                shell-script
                                
                    
                    
                        THpubs
fuente
                
                fuente

bash script.sh, llamando ashhacerbashpasar al modo de POSIX. Me acuerdo de este tipo de pregunta ha sido contestada. Puede consultar esto: unix.stackexchange.com/questions/44836/…Respuestas:
Ejecutar el script, ya sea como:
o solo:
Cuando
bashse ejecuta con el nombresh, deshabilita la mayoría de sus extensiones, como el[[operador de prueba.Como tiene la
#!/bin/bashlínea shebang, no necesita especificar explícitamente el intérprete de shell en la línea de comando. Ejecutar el script como un comando usará esa línea para encontrar el shell.fuente
Tanto sus ...
if [[ debug = "...“ ]] ; then...comandos son incorrectos que deberían leer ...fuente