@@ -120,35 +120,39 @@ static bool getShellVersionPwsh(FFstrbuf* exe, FFstrbuf* version)
120120
121121static bool getShellVersionKsh (FFstrbuf * exe , FFstrbuf * version )
122122{
123- #if __OpenBSD__ || __NetBSD__
124- if (ffProcessAppendStdOut (version , (char * const []) {
123+ if (ffProcessAppendStdErr (version , (char * const []) {
125124 exe -> chars ,
126- "-c" ,
127- "echo $KSH_VERSION" ,
125+ "--version" ,
128126 NULL
129- }) != NULL )
130- return false;
127+ }) == NULL && ffStrbufSubstrAfterFirstS (version , " (AT&T Research) " ))
128+ {
129+ // version sh (AT&T Research) 93u+ 2012-08-01
130+ ffStrbufSubstrBeforeFirstC (version , ' ' );
131+ return true;
132+ }
131133
132- // @(#)PD KSH v5.2.14 99/07/13.2
133- ffStrbufSubstrAfterFirstC (version , 'v' );
134- ffStrbufSubstrBeforeFirstC (version , ' ' );
135- #else
136- if (ffProcessAppendStdErr (version , (char * const []) {
134+ ffStrbufClear (version );
135+ if (ffProcessAppendStdOut (version , (char * const []) {
137136 exe -> chars ,
138- "--version" ,
137+ "-c" ,
138+ "echo $KSH_VERSION" ,
139139 NULL
140- }) != NULL )
141- return false;
140+ }) == NULL && ffStrbufSubstrAfterFirstS (version , " KSH " ))
141+ {
142+ // OKSH: @(#)PD KSH v5.2.14 99/07/13.2
143+ // MKSH: @(#)MIRBSD KSH R59 2025/04/26 +Debian
144+ // $OKSH_VERSION doesn't exist on OpenBSD
145+ ffStrbufSubstrBeforeFirstC (version , ' ' );
146+ ffStrbufTrimLeft (version , 'v' );
147+ return true;
148+ }
142149
143- // version sh (AT&T Research) 93u+ 2012-08-01
144- ffStrbufSubstrAfterLastC (version , ')' );
145- ffStrbufTrim (version , ' ' );
146- #endif
147- return true;
150+ return false;
148151}
149152
150153static bool getShellVersionOksh (FFstrbuf * exe , FFstrbuf * version )
151154{
155+ // Homebrew version
152156 if (ffProcessAppendStdOut (version , (char * const []) {
153157 exe -> chars ,
154158 "-c" ,
@@ -276,7 +280,7 @@ bool fftsGetShellVersion(FFstrbuf* exe, const char* exeName, FFstrbuf* version)
276280 return getExeVersionGeneral (exe , version ); //tcsh 6.24.07 (Astron) 2022-12-21 (aarch64-apple-darwin) options wide,nls,dl,al,kan,sm,rh,color,filec
277281 if (ffStrEqualsIgnCase (exeName , "nu" ))
278282 return getShellVersionNushell (exe , version );
279- if (ffStrEqualsIgnCase (exeName , "ksh" ))
283+ if (ffStrEqualsIgnCase (exeName , "ksh" ) || ffStrEqualsIgnCase ( exeName , "mksh" ) )
280284 return getShellVersionKsh (exe , version );
281285 if (ffStrEqualsIgnCase (exeName , "oksh" ))
282286 return getShellVersionOksh (exe , version );
0 commit comments