He estado intentando automatizar algo, usando sed en un bucle quería hacer esto:
while IFS= read -r line; do
sed -r -i '' "\"s|::set-output name=(.*)::(.*)\"|\"\1=\2\" >> \$GITHUB_OUTPUT|p" "$line"
done < <(grep -RIl "::set-output" | sort -u)
Esto debe alimentar una lista de archivos devueltos por grep que coincidan con el patrón a sed, que debe reemplazar cada línea con una línea similar que coincida con el nuevo formato que quiero.
Esto parece funcionar bien, pero tiene algunos resultados no deseados que no puedo explicar, cada vez que reemplaza una línea, resulta en dos nuevas líneas. No sé qué comportamiento está causando esto y mis búsquedas iniciales sobre el tema no han dado lugar a mucha información útil y no estoy seguro de qué buscar en.
Para reproducir el problema set -x
ejecuté mi bucle y tomé una de las líneas de la salida de depuración. He restablecido mi repo a los valores por defecto con git stash
y luego lo hizo:
$ sed -r -i '' 's|"::set-output name=(.*)::(.*)"|"\1=\2" >> $GITHUB_OUTPUT|p' ./.github/workflows/platform-status.yml
Ahora puedo ver en el git diff
que ha sustituido mi antigua línea por dos líneas idénticas:
- echo "::set-output name=version::${VERSION}"
+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
No entiendo de dónde viene la segunda línea y no esperaría este comportamiento del sed, ¿alguien puede decirme qué estoy haciendo mal?