OILS / demo / plugins-and-shell-state.sh View on Github | oilshell.org

35 lines, 15 significant
1#!/usr/bin/env bash
2#
3# Investigation of https://github.com/oilshell/oil/issues/268
4#
5# Usage:
6# ./plugins-and-shell-state.sh <function name>
7
8
9
10# Corrupts shell state in OSH.
11#
12# bash has save_parser_state and restore_parser_state, and bizarrely the exit
13# code and pipe status are part of that!
14#
15# OK variables are protected because they're in a subshell.
16
17PS1='$(echo ${MUTATED=hi }; echo $MUTATED; exit 42) $(echo $?)\$ '
18
19foo() { argv foo "$@"; }
20complete_foo() {
21 local first=$1
22 local cur=$2
23 local prev=$3
24
25 for candidate in one two three bin; do
26 if [[ $candidate == $cur* ]]; then
27 COMPREPLY+=("$candidate")
28 fi
29 done
30
31 COMP_MUTATED='mutated by completion plugin' # visible afterward
32
33 return 23 # doesn't appear anywhere?
34}
35complete -F complete_foo foo