From 7c4c0f584dbbb9ecb6cf0e18147162105154952b Mon Sep 17 00:00:00 2001 From: Samuel <36420837+Samueru-sama@users.noreply.github.com> Date: Fri, 27 Mar 2026 01:45:36 -0400 Subject: [PATCH] remove dependency to `/bin/sh` when using `AppRun` script --- src/main.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main.rs b/src/main.rs index c6351d3..e951b83 100644 --- a/src/main.rs +++ b/src/main.rs @@ -124,6 +124,26 @@ fn which(executable: &str) -> Option { None } +fn find_shell() -> Option { + let candidates = [ + PathBuf::from("/bin/sh"), + PathBuf::from("/bin/bash"), + PathBuf::from("/usr/bin/sh"), + PathBuf::from("/usr/bin/bash"), + ]; + for candidate in candidates { + if is_exe(&candidate) { + return Some(candidate); + } + } + for name in ["sh", "bash"] { + if let Some(path) = which(name) { + return Some(path); + } + } + None +} + fn is_script(path: &PathBuf) -> Result { let mut file = File::open(path)?; let mut buffer = [0; 2]; @@ -564,6 +584,23 @@ fn main() { exit(1) } } else if bin_name == "AppRun" { + let apprun_wrapped = Path::new(&sharun_dir).join("AppRun.sh"); + if apprun_wrapped.exists() { + let shell = find_shell().unwrap_or_else(|| { + eprintln!( + "Failed to find a shell for {}", + apprun_wrapped.display() + ); + exit(1) + }); + + let err = Command::new(shell) + .arg(apprun_wrapped) + .args(exec_args) + .exec(); + eprintln!("Failed to run AppRun.sh: {err}"); + exit(1); + } let appname_file = &format!("{sharun_dir}/.app"); let mut appname: String = "".into(); if !Path::new(appname_file).exists() {