Artículo
· 6 nov, 2024 Lectura de 2 min

Depuración de un error `<ILLEGAL VALUE>` de `$zf(-100)` que solo ocurre en Linux

Resumen: si concatenáis nombres de archivos con **/STDOUT** y **/STDERR** en una llamada a `$zf(-100)`, ponedlos entre comillas.

Me encontré con un error `<ILLEGAL VALUE>` en el siguiente código, lo cual me dejó perplejo al principio. Esto era parte de una prueba unitaria que funcionaba perfectamente en Windows, pero cuando el CI se ejecutaba en Docker fallaba:

Set outFile = ##class(%Library.File).TempFilename()
Set outDir = ##class(%Library.File).NormalizeDirectory(##class(%Library.File).TempFilename()_"dir-out")
Do ##class(%Library.File).CreateDirectoryChain(outDir)
Do $$$AssertEquals($zf(-100,"/STDOUT="_outFile_"/STDERR="_outFile,"tar","-xvf",tempDir_".tgz","-C",outDir)

El problema, que parece dolorosamente obvio una vez que sabes la respuesta, es que en Linux **outFile** contiene barras inclinadas, por lo que se interpretan como indicadores de palabra clave para `$zf(-100)` y, por supuesto, no son válidas. El error `<ILLEGAL VALUE>` en realidad es útil aquí, y la solución es poner los nombres de archivo entre comillas:

Set outFile = ##class(%Library.File).TempFilename()
Set outDir = ##class(%Library.File).NormalizeDirectory(##class(%Library.File).TempFilename()_"dir-out")
Do ##class(%Library.File).CreateDirectoryChain(outDir)
Do $$$AssertEquals($zf(-100,"/STDOUT="""_outFile_"""/STDERR="""_outFile_"""","tar","-xvf",tempDir_".tgz","-C",outDir)

Principalmente estoy publicando esto para que, si alguien le pregunta a la IA de la Comunidad de Desarrolladores "¿Por qué obtengo un error `<ILLEGAL VALUE>` de `$zf(-100)`?", esta respuesta aparezca. La respuesta inicial aquí fue muy útil; simplemente no cubría mi error específico.

Comentarios (0)1
Inicie sesión o regístrese para continuar