
Actualmente estoy escribiendo un script de Python en una máquina virtual centos 7 que tiene que ejecutar un par de comandos de shell a lo largo del camino. Encontré una biblioteca que hace el trabajo, pero aparece un error en una de ellas. Me dieron esos comandos desde un archivo de texto, por lo que en realidad no sé qué hacen. Entiendo los simples, pero estos están por encima de mi nivel. Dado que solo aparecen errores en 2 líneas, sé que no es el script en sí, sino cómo lo uso. ./linkerd
esenlazadorarchivo binario mientras que linkerd_images.txt tiene una lista de imágenes:
./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
./linkerd viz install --ha --skip-checks | grep images: | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
Me doy cuenta de que, dado que utilizan el binario de Linkerd, pueden ser exclusivos de la aplicación. Si ese es el caso, entonces tendré que averiguar dónde puedo encontrar la documentación ya que no pude encontrarla en su repositorio (de ahí que vine aquí primero).
Editar: Aquí está el error que recibí en el script:
UnicodeDecodeError: 'utf-8' codec: can't decode byte 0xe2 in position 49: Invalid continuation byte
Si ejecuto el primer comando solo en la terminal, obtengo:
sed: -e expression #1, char 1: unknown command: '[Question Mark Symbol]'
No estoy tan preocupado por el error en sí ya que realmente no espero una respuesta directa a mi código Python. Sólo me gustaría entender qué hacen los propios comandos con todos los personajes elegantes.
Me pidieron que agregue el código Python. yo asyncio
uséejecutar funciónpara ejecutar la mayoría de los comandos del shell. Entonces el código Python en sí es simplemente:
asyncio.run(run(
"""./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt"""))
También revisé el archivo binario linkerd y parece un archivo json.
Respuesta1
Aquí está la respuesta que encontré.
El problema no era el signo de intercalación, sino el apóstrofe. La persona que me dio el comando lo escribió con un teclado francés. Como está en la PC de mi trabajo, lo escribí aquí mirando la otra pantalla, así que volví a escribir un apóstrofe adecuado sin pensar en ello. Ahora que he analizado los errores de sed y lo que significan, tiene mucho más sentido. sed -e expression #1
es la primera palabra después de -e
(en este caso 's/^
). ° 1 sería '
donde debería haber buscado inicialmente si lo hubiera sabido de antemano.