@@ -70,8 +70,26 @@ export function needsNodeRuntimeMigration(issues: ServiceConfigIssue[]): boolean
7070 ) ;
7171}
7272
73+ function tokenizeShellCommandFragment ( value : string ) : string [ ] {
74+ return value . match ( / [ ^ \s ; " ' ` ] + / g) ?? [ ] ;
75+ }
76+
77+ function expandServiceCommandTokens ( programArguments ?: string [ ] ) : string [ ] {
78+ if ( ! programArguments || programArguments . length === 0 ) {
79+ return [ ] ;
80+ }
81+ const tokens : string [ ] = [ ] ;
82+ for ( const arg of programArguments ) {
83+ tokens . push ( arg ) ;
84+ if ( / [ \s ; " ' ` ] / . test ( arg ) ) {
85+ tokens . push ( ...tokenizeShellCommandFragment ( arg ) ) ;
86+ }
87+ }
88+ return tokens ;
89+ }
90+
7391function hasGatewaySubcommand ( programArguments ?: string [ ] ) : boolean {
74- return Boolean ( programArguments ? .some ( ( arg ) => arg === "gateway" ) ) ;
92+ return expandServiceCommandTokens ( programArguments ) . some ( ( arg ) => arg === "gateway" ) ;
7593}
7694
7795function parseSystemdUnit ( content : string ) : {
@@ -227,10 +245,11 @@ export function readGatewayServiceCommandPort(programArguments?: string[]): numb
227245 if ( ! programArguments || programArguments . length === 0 ) {
228246 return undefined ;
229247 }
230- for ( let index = 0 ; index < programArguments . length ; index += 1 ) {
231- const arg = programArguments [ index ] ;
248+ const commandTokens = expandServiceCommandTokens ( programArguments ) ;
249+ for ( let index = 0 ; index < commandTokens . length ; index += 1 ) {
250+ const arg = commandTokens [ index ] ;
232251 if ( arg === "--port" ) {
233- return parseGatewayPortArg ( programArguments [ index + 1 ] ) ;
252+ return parseGatewayPortArg ( commandTokens [ index + 1 ] ) ;
234253 }
235254 if ( arg . startsWith ( "--port=" ) ) {
236255 return parseGatewayPortArg ( arg . slice ( "--port=" . length ) ) ;
0 commit comments