feat(remote): serial/USB/USBIP remote forwarding with virtual serial port
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// 跨平台默认 shell 选择
|
||||
import { platform } from 'node:process'
|
||||
import { execSync } from 'node:child_process'
|
||||
|
||||
export interface ShellSpec {
|
||||
file: string
|
||||
args: string[]
|
||||
label: string
|
||||
}
|
||||
|
||||
function which(bin: string): string | null {
|
||||
try {
|
||||
const cmd = platform === 'win32' ? `where ${bin}` : `command -v ${bin}`
|
||||
const out = execSync(cmd, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim().split(/\r?\n/)[0]
|
||||
return out || null
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export function defaultShell(): ShellSpec {
|
||||
switch (platform) {
|
||||
case 'win32': {
|
||||
// 优先 PowerShell 7 (pwsh), 否则 Windows PowerShell 5 (powershell)
|
||||
const pwsh = which('pwsh.exe') || which('pwsh')
|
||||
if (pwsh) return { file: pwsh, args: ['-NoLogo'], label: 'PowerShell 7' }
|
||||
const ps5 = which('powershell.exe') || which('powershell')
|
||||
if (ps5) return { file: ps5, args: ['-NoLogo'], label: 'Windows PowerShell' }
|
||||
return { file: 'powershell.exe', args: ['-NoLogo'], label: 'PowerShell' }
|
||||
}
|
||||
case 'darwin':
|
||||
case 'linux': {
|
||||
const envShell = process.env.SHELL
|
||||
if (envShell) {
|
||||
const name = envShell.split('/').pop() || envShell
|
||||
return { file: envShell, args: [], label: name }
|
||||
}
|
||||
if (platform === 'darwin') {
|
||||
const zsh = which('zsh')
|
||||
if (zsh) return { file: zsh, args: [], label: 'zsh' }
|
||||
const bash = which('bash')
|
||||
if (bash) return { file: bash, args: ['-l'], label: 'bash' }
|
||||
} else {
|
||||
const bash = which('bash')
|
||||
if (bash) return { file: bash, args: ['-l'], label: 'bash' }
|
||||
const sh = which('sh')
|
||||
if (sh) return { file: sh, args: [], label: 'sh' }
|
||||
}
|
||||
return { file: '/bin/sh', args: [], label: 'sh' }
|
||||
}
|
||||
default:
|
||||
return { file: '/bin/sh', args: [], label: 'sh' }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user