fix: Be more restrictive with bash init fallback (#278)
This should improve compatibility with "Git Bash" with Git for Windows by using psub+source init for all bash shells v4.1 and newer.
This commit is contained in:
parent
789d504a44
commit
5a0f269d85
36
src/init.rs
36
src/init.rs
|
@ -32,12 +32,40 @@ pub fn init_stub(shell_name: &str) -> io::Result<()> {
|
||||||
|
|
||||||
let setup_stub = match shell_basename {
|
let setup_stub = match shell_basename {
|
||||||
Some("bash") => {
|
Some("bash") => {
|
||||||
/* This *should* look like the zsh function, but bash 3.2 (MacOS default shell)
|
/*
|
||||||
does not support using source with process substitution, so we use this
|
* The standard bash bootstrap is:
|
||||||
workaround from https://stackoverflow.com/a/32596626 */
|
* `source <(starship init bash --print-full-init)`
|
||||||
|
*
|
||||||
|
* Unfortunately there is an issue with bash 3.2 (the MacOS
|
||||||
|
* default) which prevents this from working. It does not support
|
||||||
|
* `source` with process substitution.
|
||||||
|
*
|
||||||
|
* There are more details here: https://stackoverflow.com/a/32596626
|
||||||
|
*
|
||||||
|
* The workaround for MacOS is to use the `/dev/stdin` trick you
|
||||||
|
* see below. However, there are some systems with emulated POSIX
|
||||||
|
* environments which do not support `/dev/stdin`. For example,
|
||||||
|
* `Git Bash` within `Git for Windows and `Termux` on Android.
|
||||||
|
*
|
||||||
|
* Fortunately, these apps ship with recent-ish versions of bash.
|
||||||
|
* Git Bash is currently shipping bash 4.4 and Termux is shipping
|
||||||
|
* bash 5.0.
|
||||||
|
*
|
||||||
|
* Some testing has suggested that bash 4.0 is also incompatible
|
||||||
|
* with the standard bootstrap, whereas bash 4.1 appears to be
|
||||||
|
* consistently compatible.
|
||||||
|
*
|
||||||
|
* The upshot of all of this, is that we will use the standard
|
||||||
|
* bootstrap whenever the bash version is 4.1 or higher. Otherwise,
|
||||||
|
* we fall back to the `/dev/stdin` solution.
|
||||||
|
*
|
||||||
|
* More background can be found in these pull requests:
|
||||||
|
* https://github.com/starship/starship/pull/241
|
||||||
|
* https://github.com/starship/starship/pull/278
|
||||||
|
*/
|
||||||
let script = {
|
let script = {
|
||||||
format!(
|
format!(
|
||||||
r#"if [ "${{BASH_VERSINFO[0]}}" -gt 4 ]
|
r#"if [ "${{BASH_VERSINFO[0]}}" -gt 4 ] || ([ "${{BASH_VERSINFO[0]}}" -eq 4 ] && [ "${{BASH_VERSINFO[1]}}" -ge 1 ])
|
||||||
then
|
then
|
||||||
source <("{}" init bash --print-full-init)
|
source <("{}" init bash --print-full-init)
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue