sed: ¿Qué significa el código de salida 2?

1

Caso

Estoy tratando de reemplazar todas las ocurrencias <value>*</value>en <value>file:\\</value>un archivo designado test.txt.

Trabajo en Windows y uso sedque he instalado con el conjunto compilado Win-32 de bash utils.

Yo uso un siguiente comando:

sed -n "s/<value>.*<\/value>/<value>file:\\\\<\/value>/g" "test.txt" > "test.txt.new"

Quiero ejecutar este comando como parte del script Wpkg .

Problema

Cuando uso este comando desde la línea de comandos, todo funciona correctamente.

Pero cuando uso este comando a través del script Wpkg :

<install cmd='%BASH%\sed -n "s/&lt;value&gt;.*&lt;\/value&gt;/&lt;value&gt;file:\\\\&lt;\/value&gt;/g;" test.txt" > "test.txt new"' />

... entonces lo que obtengo es:

Exit code returned non-successful value (2) on command '%BASH%\sed -n "s/<value>
.*<\/value>/<value>file:\\\\<\/value>/g;" "test.txt" > "test.txt.new"'.

Lo anterior significa que la sedaplicación devolvió el código de salida 2. Además, el nuevo archivo no se ha creado.

Navegué en Google durante mucho tiempo y, para mi sorpresa, sedparece tener una documentación bastante pobre. No he encontrado documentación sobre este código de salida.

Pregunta

Alguien tiene una idea de lo que hace el código de salida 2 significar para sed?

... o una solución alternativa?

(debe estar desatendido, bastante seguro de que podría usar herramientas bash comunes)

Michał Sacharewicz
fuente

Respuestas:

2

No estoy convencido de que tu problema sea sed. ¿Se supone que% BASH% debe evaluar en un directorio en el que sedreside el ejecutable y ha confirmado que lo hace? Porque mi expectativa sería que (si se define en absoluto en Windows)% BASH% evaluaría la ruta al bashejecutable en sí mismo, en cuyo caso agregar "\ sed" no tiene sentido.

En particular, notaré que el código de error 2 de DOS es "Archivo no encontrado". ¿Quizás sea un problema encontrar el archivo "% BASH% \ sed"?

poste de la cerca
fuente
% BASH% se define correctamente, pero ... "2" es un código de error de DOS, en lugar de sed, es un gran consejo. Me pregunto si podría ser la falta de la extensión .exe, eso realmente está causando el problema :) Lo comprobaré pronto, ¡gracias!
Michał Sacharewicz
He encontrado problemas al usar las utilidades de Posix (por ejemplo, 'buscar') en Windows desde archivos .bat / .cmd, porque los comandos generan y esperan rutas de estilo * nix. No parece tener eso en su expresión, pero nunca he usado Wpkg, ¿está buscando rutas de estilo * nix incluso en Windows?
poste de la cerca
Si tuviera que ejecutar sed desde bash, tendría que usar rutas de estilo * nix de hecho. Pero, cuando se ejecuta con cmd, las rutas estándar de Windows funcionan correctamente.
Michał Sacharewicz
2

¿Sed emite un código de salida?

La mayoría de las versiones de sed no lo hacen, pero verifique la documentación que vino con la versión que esté utilizando. GNU sed emite un código de salida de 0 si el programa finalizó normalmente, 1 si hubo errores en el script y 2 si hubo errores durante la ejecución del script .

Fuente LAS PREGUNTAS MÁS FRECUENTES DE SED :

DavidPostill
fuente