Bash integration: Fix declare not creating global variables in .bashrc
Fixes #5254
This commit is contained in:
parent
7281b9dbb1
commit
d6492264c7
@ -65,6 +65,8 @@ Detailed list of changes
|
|||||||
- ssh kitten: A new option :code:`--symlink-strategy` to control how symlinks
|
- ssh kitten: A new option :code:`--symlink-strategy` to control how symlinks
|
||||||
are copied to the remote machine (:iss:`5249`)
|
are copied to the remote machine (:iss:`5249`)
|
||||||
|
|
||||||
|
- Bash integration: Fix declare not creating global variables in .bashrc (:iss:`5254`)
|
||||||
|
|
||||||
|
|
||||||
0.25.2 [2022-06-07]
|
0.25.2 [2022-06-07]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@ -285,6 +285,10 @@ PS1="{ps1}"
|
|||||||
pty.write_to_child('\x04')
|
pty.write_to_child('\x04')
|
||||||
pty.send_cmd_to_child('clear')
|
pty.send_cmd_to_child('clear')
|
||||||
pty.wait_till(lambda: pty.callbacks.titlebuf)
|
pty.wait_till(lambda: pty.callbacks.titlebuf)
|
||||||
|
with self.run_shell(shell='bash', rc=f'''PS1="{ps1}"\ndeclare LOCAL_KSI_VAR=1''') as pty:
|
||||||
|
pty.callbacks.clear()
|
||||||
|
pty.send_cmd_to_child('declare')
|
||||||
|
pty.wait_till(lambda: 'LOCAL_KSI_VAR' in pty.screen_contents())
|
||||||
with self.run_shell(shell='bash', rc=f'''PS1="{ps1}"''') as pty:
|
with self.run_shell(shell='bash', rc=f'''PS1="{ps1}"''') as pty:
|
||||||
pty.callbacks.clear()
|
pty.callbacks.clear()
|
||||||
pty.send_cmd_to_child('printf "%s\x16\a%s" "a" "b"')
|
pty.send_cmd_to_child('printf "%s\x16\a%s" "a" "b"')
|
||||||
|
|||||||
@ -3,26 +3,24 @@
|
|||||||
if [[ "$-" != *i* ]] ; then builtin return; fi # check in interactive mode
|
if [[ "$-" != *i* ]] ; then builtin return; fi # check in interactive mode
|
||||||
if [[ -z "$KITTY_SHELL_INTEGRATION" ]]; then builtin return; fi
|
if [[ -z "$KITTY_SHELL_INTEGRATION" ]]; then builtin return; fi
|
||||||
|
|
||||||
_ksi_inject() {
|
|
||||||
# Load the normal bash startup files
|
# Load the normal bash startup files
|
||||||
if [[ -n "$KITTY_BASH_INJECT" ]]; then
|
if [[ -n "$KITTY_BASH_INJECT" ]]; then
|
||||||
builtin local kitty_bash_inject="$KITTY_BASH_INJECT"
|
builtin declare kitty_bash_inject="$KITTY_BASH_INJECT"
|
||||||
builtin local ksi_val="$KITTY_SHELL_INTEGRATION"
|
builtin declare ksi_val="$KITTY_SHELL_INTEGRATION"
|
||||||
builtin unset KITTY_SHELL_INTEGRATION # ensure manual sourcing of this file in bashrc does not have any effect
|
builtin unset KITTY_SHELL_INTEGRATION # ensure manual sourcing of this file in bashrc does not have any effect
|
||||||
builtin unset KITTY_BASH_INJECT ENV
|
builtin unset KITTY_BASH_INJECT ENV
|
||||||
if [[ -z "$HOME" ]]; then HOME=~; fi
|
if [[ -z "$HOME" ]]; then HOME=~; fi
|
||||||
if [[ -z "$KITTY_BASH_ETC_LOCATION" ]]; then KITTY_BASH_ETC_LOCATION="/etc"; fi
|
if [[ -z "$KITTY_BASH_ETC_LOCATION" ]]; then KITTY_BASH_ETC_LOCATION="/etc"; fi
|
||||||
|
|
||||||
_ksi_safe_source() {
|
_ksi_sourceable() {
|
||||||
if [[ -f "$1" && -r "$1" ]]; then
|
[[ -f "$1" && -r "$1" ]] && return 0; return 1;
|
||||||
builtin source "$1"
|
|
||||||
builtin return 0
|
|
||||||
fi
|
|
||||||
builtin return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$kitty_bash_inject" == *"posix"* ]]; then
|
if [[ "$kitty_bash_inject" == *"posix"* ]]; then
|
||||||
_ksi_safe_source "$KITTY_BASH_POSIX_ENV" && builtin export ENV="$KITTY_BASH_POSIX_ENV"
|
_ksi_sourceable "$KITTY_BASH_POSIX_ENV" && {
|
||||||
|
builtin source "$KITTY_BASH_POSIX_ENV"
|
||||||
|
builtin export ENV="$KITTY_BASH_POSIX_ENV"
|
||||||
|
}
|
||||||
else
|
else
|
||||||
builtin set +o posix
|
builtin set +o posix
|
||||||
if [[ -n "$KITTY_BASH_UNEXPORT_HISTFILE" ]]; then
|
if [[ -n "$KITTY_BASH_UNEXPORT_HISTFILE" ]]; then
|
||||||
@ -33,8 +31,10 @@ _ksi_inject() {
|
|||||||
# See run_startup_files() in shell.c in the Bash source code
|
# See run_startup_files() in shell.c in the Bash source code
|
||||||
if builtin shopt -q login_shell; then
|
if builtin shopt -q login_shell; then
|
||||||
if [[ "$kitty_bash_inject" != *"no-profile"* ]]; then
|
if [[ "$kitty_bash_inject" != *"no-profile"* ]]; then
|
||||||
_ksi_safe_source "$KITTY_BASH_ETC_LOCATION/profile"
|
_ksi_sourceable "$KITTY_BASH_ETC_LOCATION/profile" && builtin source "$KITTY_BASH_ETC_LOCATION/profile"
|
||||||
_ksi_safe_source "$HOME/.bash_profile" || _ksi_safe_source "$HOME/.bash_login" || _ksi_safe_source "$HOME/.profile"
|
for _ksi_i in "$HOME/.bash_profile" "$HOME/.bash_login" "$HOME/.profile"; do
|
||||||
|
_ksi_sourceable "$_ksi_i" && { builtin source "$_ksi_i"; break; }
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ "$kitty_bash_inject" != *"no-rc"* ]]; then
|
if [[ "$kitty_bash_inject" != *"no-rc"* ]]; then
|
||||||
@ -43,19 +43,20 @@ _ksi_inject() {
|
|||||||
# Arch, Debian, Ubuntu use /etc/bash.bashrc
|
# Arch, Debian, Ubuntu use /etc/bash.bashrc
|
||||||
# Fedora uses /etc/bashrc sourced from ~/.bashrc instead of SYS_BASHRC
|
# Fedora uses /etc/bashrc sourced from ~/.bashrc instead of SYS_BASHRC
|
||||||
# Void Linux uses /etc/bash/bashrc
|
# Void Linux uses /etc/bash/bashrc
|
||||||
_ksi_safe_source "$KITTY_BASH_ETC_LOCATION/bash.bashrc" || _ksi_safe_source "$KITTY_BASH_ETC_LOCATION/bash/bashrc"
|
for _ksi_i in "$KITTY_BASH_ETC_LOCATION/bash.bashrc" "$KITTY_BASH_ETC_LOCATION/bash/bashrc" ; do
|
||||||
|
_ksi_sourceable "$_ksi_i" && { builtin source "$_ksi_i"; break; }
|
||||||
|
done
|
||||||
if [[ -z "$KITTY_BASH_RCFILE" ]]; then KITTY_BASH_RCFILE="$HOME/.bashrc"; fi
|
if [[ -z "$KITTY_BASH_RCFILE" ]]; then KITTY_BASH_RCFILE="$HOME/.bashrc"; fi
|
||||||
_ksi_safe_source "$KITTY_BASH_RCFILE"
|
_ksi_sourceable "$KITTY_BASH_RCFILE" && builtin source "$KITTY_BASH_RCFILE"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
builtin unset KITTY_BASH_RCFILE KITTY_BASH_POSIX_ENV KITTY_BASH_ETC_LOCATION
|
builtin unset KITTY_BASH_RCFILE KITTY_BASH_POSIX_ENV KITTY_BASH_ETC_LOCATION
|
||||||
builtin unset -f _ksi_safe_source
|
builtin unset -f _ksi_sourceable
|
||||||
builtin export KITTY_SHELL_INTEGRATION="$ksi_val"
|
builtin export KITTY_SHELL_INTEGRATION="$ksi_val"
|
||||||
|
builtin unset _ksi_i ksi_val kitty_bash_inject
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
_ksi_inject
|
|
||||||
builtin unset -f _ksi_inject
|
|
||||||
|
|
||||||
if [ "${BASH_VERSINFO:-0}" -lt 4 ]; then
|
if [ "${BASH_VERSINFO:-0}" -lt 4 ]; then
|
||||||
builtin unset KITTY_SHELL_INTEGRATION
|
builtin unset KITTY_SHELL_INTEGRATION
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user