J'ai essayé d'automatiser quelque chose, en utilisant sed dans une boucle, je voulais faire ceci :
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)
Cela devrait alimenter une liste de fichiers renvoyés par grep qui correspondent au motif à sed, qui devrait remplacer chaque ligne par une ligne similaire correspondant au nouveau format que je souhaite.
Cela semble fonctionner correctement, mais cela provoque certains résultats non souhaités que je ne peux expliquer, à chaque fois qu'il remplace une ligne, cela entraîne deux nouvelles lignes. Je ne sais pas quel comportement provoque cela et mes premières recherches autour du sujet n'ont pas donné beaucoup d'informations utiles, je ne sais pas quoi chercher.
Pour reproduire le problème, j'ai set -x
, exécuté ma boucle et ai pris l'une des lignes de la sortie de débogage. J'ai réinitialisé mon dépôt par défaut avec git stash
et ai fait :
$ sed -r -i '' 's|"::set-output name=(.*)::(.*)"|"\1=\2" >> $GITHUB_OUTPUT|p' ./.github/workflows/platform-status.yml
Maintenant je peux voir dans le git diff
qu'il a remplacé ma vieille ligne par deux lignes identiques :
- echo "::set-output name=version::${VERSION}"
+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
Je ne comprends pas d'où vient la deuxième ligne et je ne m'attendrais pas à ce comportement de sed, quelqu'un peut-il me dire ce que je fais de mal ?