Skip to content

Commit 5e27ee0

Browse files
committed
Shell: fixes ksh version detection on Linux
1 parent 84a5c6e commit 5e27ee0

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

src/detection/terminalshell/terminalshell.c

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -120,35 +120,39 @@ static bool getShellVersionPwsh(FFstrbuf* exe, FFstrbuf* version)
120120

121121
static 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

150153
static 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

Comments
 (0)