Résumé : si vous concaténez des noms de fichiers dans /STDOUT et /STDERR dans un appel $zf(-100), mettez-les entre guillemets.
J'ai rencontré une erreur <ILLEGAL VALUE> qui m'a d'abord déconcerté. Cela faisait partie d'un test unitaire qui fonctionnait parfaitement bien sous Windows, mais lorsque CI s'exécutait sur Docker, il échouait :
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)
Le problème, qui semble douloureusement évident une fois que vous connaissez la réponse, est que sous Linux outFile contient des barres obliques, donc elles sont interprétées comme des indicateurs de mot-clé pour $zf(-100) et bien sûr ne sont pas valides. L'erreur <ILLEGAL VALUE>
est en fait utile ici, et la solution est de mettre les noms de fichiers entre guillemets :
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)