¿Por qué mi script bash intenta ejecutar comentarios como código?

Estoy escribiendo un script bash para ejecutar varios programas de python en un orden particular y se ve así:

#!/bin/bash
set -e
python prog1.py #make database
python prog2.py #plots
python prog3.py #more plots

Esto funciona bien, pero cuando comento la primera línea:

#!/bin/bash
set -e
#python prog1.py #make database
python prog2.py #plots
python prog3.py #more plots

Choca con:

./python_progs.sh: line 3: plots: command not found

Es como si estuviera ignorando el '#' delante de 'plots' y estuviera tratando de ejecutarlo como código. Otra cosa extraña es que esto no sucede todo el tiempo, a veces el segundo código se ejecuta sin problemas, a veces falla. ¿Me estoy perdiendo algo básico sobre cómo funcionan los comentarios en los scripts bash?

Para las personas que comentan a continuación, aquí está el código exacto:

#!/bin/bash
set -e
python footprint_hex.py >> ./paper/qso_num.txt #this makes the footpring figures
python sed_db_read.py #makes the inital databases
python sed_db_read2.py #makes the new databases for lum and civ and modles
python sed_db_plots_paper.py #plots
python sed_db_plots_paper_png.py #plots

Cuando no se comentan líneas, funciona bien, pero cuando se comentan las líneas 3 y 4 se bloquea con:

./compile_dbs.sh: line 5: and: command not found

y al comentar las líneas 3, 4 y 5 se bloquea con:

./compile_dbs.sh: line 6: plots: command not found

Mis pasos exactos para ejecutar el script son:

./compile_dbs.sh

preguntado el 03 de mayo de 12 a las 19:05

¿Es este el código completo exactamente como en el archivo? -

Si ese es el contenido exacto del archivo, confirme con xxd para volcarlo hexadecimalmente. Asegúrate de que no haya ningún personaje invisible allí. Además, puedes conseguir errores extraños como ese si edita un script de shell mientras se está ejecutando, no lo haga. -

Tienes que estar trolleándonos... :S Si no es así, actualiza con los pasos exactos que estás tomando y verifica si tu archivo bash no tiene ningún carácter de control extraño. verifique el script usando set -x también -

Supongo que su script real tiene una comilla simple en alguna parte. Eso haría que bash leyera más allá del final de la línea y más allá de un delimitador de comentario:

@derobert Está totalmente de acuerdo con esto. Estos errores son muy indicativos de un problema de nueva línea de Windows/Unix (\n frente a \r\n) -

2 Respuestas

¡Encontré el problema! Estaba editando el script bash mientras se ejecutaba, esto es lo que causó los bloqueos.

contestado el 04 de mayo de 12 a las 18:05

No estoy del todo seguro de lo que está pasando, pero creo que está interpretando #plots como argumento al guión prog2.py

Para estar seguro, es posible que desee poner el comentario en una línea separada

contestado el 03 de mayo de 12 a las 19:05

Shell no requiere que los comentarios estén en una línea separada. - derobert

Me parece que el mensaje de error 'comando no encontrado' proviene de bash. Así que esto probablemente no tenga nada que ver con el contenido de prog2.py. - Jonas Geiregat

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.