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 |
|
17 | PS1='$(echo ${MUTATED=hi }; echo $MUTATED; exit 42) $(echo $?)\$ '
|
18 |
|
19 | foo() { argv foo "$@"; }
|
20 | complete_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 | }
|
35 | complete -F complete_foo foo
|