List<String> () { List<String> shells = new ArrayList<>(); if (SystemInfo.isUnix) { addIfExists(shells, "/bin/bash"); addIfExists(shells, "/usr/bin/zsh"); addIfExists(shells, "/usr/local/bin/zsh"); addIfExists(shells, "/usr/bin/fish"); addIfExists(shells, "/usr/local/bin/fish"); } else if (SystemInfo.isWindows) { File powershell = PathEnvironmentVariableUtil.findInPath("powershell.exe"); if (powershell != null && StringUtil.startsWithIgnoreCase(powershell.getAbsolutePath(), "C:\\Windows\\System32\\WindowsPowerShell\\")) { shells.add(powershell.getAbsolutePath()); } File cmd = PathEnvironmentVariableUtil.findInPath("cmd.exe"); if (cmd != null && StringUtil.startsWithIgnoreCase(cmd.getAbsolutePath(), "C:\\Windows\\System32\\")) { shells.add(cmd.getAbsolutePath()); } File pwsh = PathEnvironmentVariableUtil.findInPath("pwsh.exe"); if (pwsh != null && StringUtil.startsWithIgnoreCase(pwsh.getAbsolutePath(), "C:\\Program Files\\PowerShell\\")) { shells.add(pwsh.getAbsolutePath()); } File gitBash = new File("C:\\Program Files\\Git\\bin\\bash.exe"); if (gitBash.isFile()) { shells.add(gitBash.getAbsolutePath()); } String cmderRoot = EnvironmentUtil.getValue("CMDER_ROOT"); if (cmderRoot == null) { cmderRoot = myEnvVarField.getEnvs().get("CMDER_ROOT"); } if (cmderRoot != null && cmd != null && StringUtil.startsWithIgnoreCase(cmd.getAbsolutePath(), "C:\\Windows\\System32\\")) { shells.add("cmd.exe /k \"%CMDER_ROOT%\\vendor\\init.bat\""); } } return shells; }