fix(desktop): source shell rc before launching CLI (#332)

Fixes #326

## Summary
- source the user's bash or zsh rc before launching the bundled CLI from
Tauri
- use `-l -i -c` for zsh so shell-managed Node runtimes are available in
launcher-started sessions
- fixes the reproduced Linux launcher case where the app exits with `CLI
exited early: exit status: 127` while terminal launches work

## Validation
- reproduced the failure with the released Tauri `v0.14.0` Linux binary
- verified the patched binary succeeds under the same launcher-like
environment
- ran `cargo build` on the dev-based PR branch
This commit is contained in:
Pascal André
2026-04-19 00:34:49 +02:00
committed by GitHub
parent e022a158eb
commit cb84547c88
2 changed files with 8 additions and 20 deletions

View File

@@ -20,24 +20,10 @@ function getDefaultShellPath(): string {
return "/bin/bash" return "/bin/bash"
} }
function wrapCommandForShell(command: string, shellPath: string): string {
const shellName = path.basename(shellPath)
if (shellName.includes("bash")) {
return 'if [ -f ~/.bashrc ]; then source ~/.bashrc >/dev/null 2>&1; fi; ' + command
}
if (shellName.includes("zsh")) {
return 'if [ -f ~/.zshrc ]; then source ~/.zshrc >/dev/null 2>&1; fi; ' + command
}
return command
}
function buildShellArgs(shellPath: string): string[] { function buildShellArgs(shellPath: string): string[] {
const shellName = path.basename(shellPath) const shellName = path.basename(shellPath)
if (shellName.includes("zsh")) { if (shellName.includes("zsh") || shellName.includes("bash")) {
return ["-l", "-i", "-c"] return ["-i", "-l", "-c"]
} }
return ["-l", "-c"] return ["-l", "-c"]
} }
@@ -59,12 +45,11 @@ export function buildUserShellCommand(userCommand: string): ShellCommand {
} }
const shellPath = getDefaultShellPath() const shellPath = getDefaultShellPath()
const script = wrapCommandForShell(userCommand, shellPath)
const args = buildShellArgs(shellPath) const args = buildShellArgs(shellPath)
return { return {
command: shellPath, command: shellPath,
args: [...args, script], args: [...args, userCommand],
} }
} }

View File

@@ -1288,8 +1288,11 @@ fn build_shell_args(shell: &str, command: &str) -> Vec<String> {
.unwrap_or("") .unwrap_or("")
.to_lowercase(); .to_lowercase();
let _ = shell_name; if shell_name.contains("zsh") || shell_name.contains("bash") {
vec!["-l".into(), "-c".into(), command.into()] vec!["-i".into(), "-l".into(), "-c".into(), command.into()]
} else {
vec!["-l".into(), "-c".into(), command.into()]
}
} }
fn first_existing(paths: Vec<Option<PathBuf>>) -> Option<String> { fn first_existing(paths: Vec<Option<PathBuf>>) -> Option<String> {