[INFO] fetching crate usage-lib 1.5.2...
[INFO] testing usage-lib-1.5.2 against 1.83.0 for beta-1.84.0-4-retry
[INFO] extracting crate usage-lib 1.5.2 into /workspace/builds/worker-1-tc1/source
[INFO] validating manifest of crates.io crate usage-lib 1.5.2 on toolchain 1.83.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.83.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking crates.io crate usage-lib 1.5.2
[INFO] finished tweaking crates.io crate usage-lib 1.5.2
[INFO] tweaked toml for crates.io crate usage-lib 1.5.2 written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.83.0" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]      Locking 160 packages to latest compatible versions
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.83.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded xx v2.0.3
[INFO] [stderr]   Downloaded shared_child v1.0.1
[INFO] [stderr]   Downloaded versions v6.3.2
[INFO] [stderr]   Downloaded homedir v0.3.4
[INFO] [stderr]   Downloaded kdl v4.7.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:f3a9d4ad9d972b27faf3965f35b62e55ba32bbce8f20bc8fe909558a86702fde" "/opt/rustwide/cargo-home/bin/cargo" "+1.83.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 5adf8666f6762c709eb899a5a3c1c17acd6ad3437bfaef822a9ad981aef0e0ac
[INFO] running `Command { std: "docker" "start" "-a" "5adf8666f6762c709eb899a5a3c1c17acd6ad3437bfaef822a9ad981aef0e0ac", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5adf8666f6762c709eb899a5a3c1c17acd6ad3437bfaef822a9ad981aef0e0ac", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5adf8666f6762c709eb899a5a3c1c17acd6ad3437bfaef822a9ad981aef0e0ac", kill_on_drop: false }`
[INFO] [stdout] 5adf8666f6762c709eb899a5a3c1c17acd6ad3437bfaef822a9ad981aef0e0ac
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:f3a9d4ad9d972b27faf3965f35b62e55ba32bbce8f20bc8fe909558a86702fde" "/opt/rustwide/cargo-home/bin/cargo" "+1.83.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5de702a4afa631bb4990f31ddd3368597c56607403d703358a93497efbc2e74a
[INFO] running `Command { std: "docker" "start" "-a" "5de702a4afa631bb4990f31ddd3368597c56607403d703358a93497efbc2e74a", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.92
[INFO] [stderr]    Compiling unicode-ident v1.0.14
[INFO] [stderr]    Compiling memchr v2.7.4
[INFO] [stderr]    Compiling libc v0.2.168
[INFO] [stderr]    Compiling cfg-if v1.0.0
[INFO] [stderr]    Compiling siphasher v0.3.11
[INFO] [stderr]    Compiling thiserror v2.0.7
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]    Compiling crossbeam-utils v0.8.20
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling phf_shared v0.11.2
[INFO] [stderr]    Compiling once_cell v1.20.2
[INFO] [stderr]    Compiling autocfg v1.4.0
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]    Compiling syn v2.0.90
[INFO] [stderr]    Compiling phf_generator v0.11.2
[INFO] [stderr]    Compiling phf_codegen v0.11.2
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling phf v0.11.2
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling serde v1.0.216
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]    Compiling cfg_aliases v0.2.1
[INFO] [stderr]    Compiling bitflags v2.6.0
[INFO] [stderr]    Compiling log v0.4.22
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling getrandom v0.2.15
[INFO] [stderr]    Compiling bstr v1.11.1
[INFO] [stderr]    Compiling libm v0.2.11
[INFO] [stderr]    Compiling rustversion v1.0.18
[INFO] [stderr]    Compiling unic-char-range v0.9.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling unic-common v0.9.0
[INFO] [stderr]    Compiling unic-ucd-version v0.9.0
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling unic-char-property v0.9.0
[INFO] [stderr]    Compiling parse-zoneinfo v0.3.1
[INFO] [stderr]    Compiling crossbeam-deque v0.8.5
[INFO] [stderr]    Compiling thiserror-impl v2.0.7
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling serde_derive v1.0.216
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling chrono-tz-build v0.3.0
[INFO] [stderr]    Compiling miette-derive v7.4.0
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]    Compiling chrono-tz v0.9.0
[INFO] [stderr]    Compiling globset v0.4.15
[INFO] [stderr]    Compiling zerocopy v0.7.35
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling iana-time-zone v0.1.61
[INFO] [stderr]    Compiling pest v2.7.15
[INFO] [stderr]    Compiling serde_json v1.0.133
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling miette v7.4.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.20
[INFO] [stderr]    Compiling chrono v0.4.39
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling ignore v0.4.23
[INFO] [stderr]    Compiling pest_meta v2.7.15
[INFO] [stderr]    Compiling unic-ucd-segment v0.9.0
[INFO] [stderr]    Compiling shared_child v1.0.1
[INFO] [stderr]    Compiling os_pipe v1.2.1
[INFO] [stderr]    Compiling either v1.13.0
[INFO] [stderr]    Compiling deunicode v1.6.0
[INFO] [stderr]    Compiling ryu v1.0.18
[INFO] [stderr]    Compiling itoa v1.0.14
[INFO] [stderr]    Compiling pest_generator v2.7.15
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling duct v0.13.7
[INFO] [stderr]    Compiling slug v0.1.6
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling humansize v2.1.3
[INFO] [stderr]    Compiling unic-segment v0.9.0
[INFO] [stderr]    Compiling homedir v0.3.4
[INFO] [stderr]    Compiling globwalk v0.9.1
[INFO] [stderr]    Compiling filetime v0.2.25
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling percent-encoding v2.3.1
[INFO] [stderr]    Compiling equivalent v1.0.1
[INFO] [stderr]    Compiling pest_derive v2.7.15
[INFO] [stderr]    Compiling hashbrown v0.15.2
[INFO] [stderr]    Compiling xx v2.0.3
[INFO] [stderr]    Compiling kdl v4.7.0
[INFO] [stderr]    Compiling versions v6.3.2
[INFO] [stderr]    Compiling shell-words v1.1.0
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling indexmap v2.7.0
[INFO] [stderr]    Compiling tera v1.20.0
[INFO] [stderr]    Compiling usage-lib v1.5.2 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 28s
[INFO] running `Command { std: "docker" "inspect" "5de702a4afa631bb4990f31ddd3368597c56607403d703358a93497efbc2e74a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5de702a4afa631bb4990f31ddd3368597c56607403d703358a93497efbc2e74a", kill_on_drop: false }`
[INFO] [stdout] 5de702a4afa631bb4990f31ddd3368597c56607403d703358a93497efbc2e74a
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:f3a9d4ad9d972b27faf3965f35b62e55ba32bbce8f20bc8fe909558a86702fde" "/opt/rustwide/cargo-home/bin/cargo" "+1.83.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5c0afbd21fda640f126205f97610da90a979d72643f0a7d65ee657fa74d8a174
[INFO] running `Command { std: "docker" "start" "-a" "5c0afbd21fda640f126205f97610da90a979d72643f0a7d65ee657fa74d8a174", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.90
[INFO] [stderr]    Compiling console v0.15.8
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling similar v2.6.0
[INFO] [stderr]    Compiling diff v0.1.13
[INFO] [stderr]    Compiling yansi v1.0.1
[INFO] [stderr]    Compiling pretty_assertions v1.4.1
[INFO] [stderr]    Compiling insta v1.41.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.7
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling serde_derive v1.0.216
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling miette-derive v7.4.0
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling ctor v0.2.9
[INFO] [stderr]    Compiling zerocopy v0.7.35
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling miette v7.4.0
[INFO] [stderr]    Compiling thiserror v2.0.7
[INFO] [stderr]    Compiling pest v2.7.15
[INFO] [stderr]    Compiling ppv-lite86 v0.2.20
[INFO] [stderr]    Compiling xx v2.0.3
[INFO] [stderr]    Compiling kdl v4.7.0
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling pest_meta v2.7.15
[INFO] [stderr]    Compiling serde v1.0.216
[INFO] [stderr]    Compiling pest_generator v2.7.15
[INFO] [stderr]    Compiling pest_derive v2.7.15
[INFO] [stderr]    Compiling serde_json v1.0.133
[INFO] [stderr]    Compiling indexmap v2.7.0
[INFO] [stderr]    Compiling tera v1.20.0
[INFO] [stderr]    Compiling usage-lib v1.5.2 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 58.86s
[INFO] running `Command { std: "docker" "inspect" "5c0afbd21fda640f126205f97610da90a979d72643f0a7d65ee657fa74d8a174", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5c0afbd21fda640f126205f97610da90a979d72643f0a7d65ee657fa74d8a174", kill_on_drop: false }`
[INFO] [stdout] 5c0afbd21fda640f126205f97610da90a979d72643f0a7d65ee657fa74d8a174
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:f3a9d4ad9d972b27faf3965f35b62e55ba32bbce8f20bc8fe909558a86702fde" "/opt/rustwide/cargo-home/bin/cargo" "+1.83.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 3390d6b20d6c6dc9dc001cd5d17ad1c31afeefa612dc3be28d70c453ce7e2240
[INFO] running `Command { std: "docker" "start" "-a" "3390d6b20d6c6dc9dc001cd5d17ad1c31afeefa612dc3be28d70c453ce7e2240", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.19s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/usage-0fef4161ae78622b)
[INFO] [stdout] 
[INFO] [stdout] running 15 tests
[INFO] [stdout] test parse::tests::test_as_env ... ok
[INFO] [stdout] test parse::tests::test_parse ... ok
[INFO] [stdout] test spec::config::tests::test_config_defaults ... ok
[INFO] [stdout] test spec::flag::tests::from_str ... ok
[INFO] [stdout] test spec::tests::test_display ... ok
[INFO] [stdout] test test::test_arg_not_required_if_default ... ok
[INFO] [stdout] test test::test_flag_not_required_if_default ... ok
[INFO] [stdout] test test::test_parse ... ok
[INFO] [stdout] test docs::markdown::flag::tests::test_render_markdown_flag ... ok
[INFO] [stdout] test docs::markdown::arg::tests::test_render_markdown_arg ... ok
[INFO] [stdout] test docs::markdown::cmd::tests::test_render_markdown_cmd ... ok
[INFO] [stdout] test docs::markdown::spec::tests::test_render_markdown_spec ... ok
[INFO] [stdout] test complete::bash::tests::test_complete_bash ... FAILED
[INFO] [stdout] test complete::fish::tests::test_complete_fish ... FAILED
[INFO] [stdout] test complete::zsh::tests::test_complete_zsh ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- complete::bash::tests::test_complete_bash stdout ----
[INFO] [stdout] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot Summary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[INFO] [stdout] Snapshot file: src/complete/snapshots/usage__complete__bash__tests__complete_bash.snap
[INFO] [stdout] Snapshot: complete_bash
[INFO] [stdout] Source: src/complete/bash.rs:74
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] Expression: complete_bash(&CompleteOptions
[INFO] [stdout] {
[INFO] [stdout]     shell: "bash".to_string(), bin: "mycli".to_string(), cache_key: None,
[INFO] [stdout]     spec: None, usage_cmd: Some("mycli complete --usage".to_string()),
[INFO] [stdout] })
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] +new results
[INFO] [stdout] ────────────┬───────────────────────────────────────────────────────────────────
[INFO] [stdout]           0 │+#                                                          -*- shell-script -*-
[INFO] [stdout]           1 │+#
[INFO] [stdout]           2 │+#   bash_completion - programmable completion functions for bash 4.2+
[INFO] [stdout]           3 │+#
[INFO] [stdout]           4 │+#   Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
[INFO] [stdout]           5 │+#             © 2009-2020, Bash Completion Maintainers
[INFO] [stdout]           6 │+#
[INFO] [stdout]           7 │+#   This program is free software; you can redistribute it and/or modify
[INFO] [stdout]           8 │+#   it under the terms of the GNU General Public License as published by
[INFO] [stdout]           9 │+#   the Free Software Foundation; either version 2, or (at your option)
[INFO] [stdout]          10 │+#   any later version.
[INFO] [stdout]          11 │+#
[INFO] [stdout]          12 │+#   This program is distributed in the hope that it will be useful,
[INFO] [stdout]          13 │+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
[INFO] [stdout]          14 │+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
[INFO] [stdout]          15 │+#   GNU General Public License for more details.
[INFO] [stdout]          16 │+#
[INFO] [stdout]          17 │+#   You should have received a copy of the GNU General Public License
[INFO] [stdout]          18 │+#   along with this program; if not, write to the Free Software Foundation,
[INFO] [stdout]          19 │+#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
[INFO] [stdout]          20 │+#
[INFO] [stdout]          21 │+#   The latest version of this software can be obtained here:
[INFO] [stdout]          22 │+#
[INFO] [stdout]          23 │+#   https://github.com/scop/bash-completion
[INFO] [stdout]          24 │+
[INFO] [stdout]          25 │+BASH_COMPLETION_VERSINFO=(
[INFO] [stdout]          26 │+    2  # x-release-please-major
[INFO] [stdout]          27 │+    15 # x-release-please-minor
[INFO] [stdout]          28 │+    0  # x-release-please-patch
[INFO] [stdout]          29 │+)
[INFO] [stdout]          30 │+
[INFO] [stdout]          31 │+if [[ $- == *v* ]]; then
[INFO] [stdout]          32 │+    _comp__init_original_set_v="-v"
[INFO] [stdout]          33 │+else
[INFO] [stdout]          34 │+    _comp__init_original_set_v="+v"
[INFO] [stdout]          35 │+fi
[INFO] [stdout]          36 │+
[INFO] [stdout]          37 │+if [[ ${BASH_COMPLETION_DEBUG-} ]]; then
[INFO] [stdout]          38 │+    set -v
[INFO] [stdout]          39 │+else
[INFO] [stdout]          40 │+    set +v
[INFO] [stdout]          41 │+fi
[INFO] [stdout]          42 │+
[INFO] [stdout]          43 │+# Turn on extended globbing and programmable completion
[INFO] [stdout]          44 │+shopt -s extglob progcomp
[INFO] [stdout]          45 │+
[INFO] [stdout]          46 │+# Declare a compatibility function name
[INFO] [stdout]          47 │+# @param $1 Version of bash-completion where the deprecation occurred
[INFO] [stdout]          48 │+# @param $2 Old function name
[INFO] [stdout]          49 │+# @param $3 New function name
[INFO] [stdout]          50 │+# @since 2.12
[INFO] [stdout]          51 │+_comp_deprecate_func()
[INFO] [stdout]          52 │+{
[INFO] [stdout]          53 │+    if (($# != 3)); then
[INFO] [stdout]          54 │+        printf 'bash_completion: %s: usage: %s DEPRECATION_VERSION OLD_NAME NEW_NAME\n' "$FUNCNAME" "$FUNCNAME"
[INFO] [stdout]          55 │+        return 2
[INFO] [stdout]          56 │+    fi
[INFO] [stdout]          57 │+    if [[ $2 != [a-zA-Z_]*([a-zA-Z_0-9]) ]]; then
[INFO] [stdout]          58 │+        printf 'bash_completion: %s: %s\n' "$FUNCNAME" "\$2: invalid function name '$1'" >&2
[INFO] [stdout]          59 │+        return 2
[INFO] [stdout]          60 │+    elif [[ $3 != [a-zA-Z_]*([a-zA-Z_0-9]) ]]; then
[INFO] [stdout]          61 │+        printf 'bash_completion: %s: %s\n' "$FUNCNAME" "\$3: invalid function name '$2'" >&2
[INFO] [stdout]          62 │+        return 2
[INFO] [stdout]          63 │+    fi
[INFO] [stdout]          64 │+    eval -- "$2() { $3 \"\$@\"; }"
[INFO] [stdout]          65 │+}
[INFO] [stdout]          66 │+
[INFO] [stdout]          67 │+# Declare a compatibility variable name.
[INFO] [stdout]          68 │+# For bash 4.3+, a real name alias is created, allowing value changes to
[INFO] [stdout]          69 │+# "apply through" when the variables are set later. For bash versions earlier
[INFO] [stdout]          70 │+# than that, the operation is once-only; the value of the new variable
[INFO] [stdout]          71 │+# (if it's unset) is set to that of the old (if set) at call time.
[INFO] [stdout]          72 │+#
[INFO] [stdout]          73 │+# @param $1 Version of bash-completion where the deprecation occurred
[INFO] [stdout]          74 │+# @param $2 Old variable name
[INFO] [stdout]          75 │+# @param $3 New variable name
[INFO] [stdout]          76 │+# @since 2.12
[INFO] [stdout]          77 │+_comp_deprecate_var()
[INFO] [stdout]          78 │+{
[INFO] [stdout]          79 │+    if (($# != 3)); then
[INFO] [stdout]          80 │+        printf 'bash_completion: %s: usage: %s DEPRECATION_VERSION OLD_NAME NEW_NAME\n' "$FUNCNAME" "$FUNCNAME"
[INFO] [stdout]          81 │+        return 2
[INFO] [stdout]          82 │+    fi
[INFO] [stdout]          83 │+    if [[ $2 != [a-zA-Z_]*([a-zA-Z_0-9]) ]]; then
[INFO] [stdout]          84 │+        printf 'bash_completion: %s: %s\n' "$FUNCNAME" "\$2: invalid variable name '$1'" >&2
[INFO] [stdout]          85 │+        return 2
[INFO] [stdout]          86 │+    elif [[ $3 != [a-zA-Z_]*([a-zA-Z_0-9]) ]]; then
[INFO] [stdout]          87 │+        printf 'bash_completion: %s: %s\n' "$FUNCNAME" "\$3: invalid variable name '$2'" >&2
[INFO] [stdout]          88 │+        return 2
[INFO] [stdout]          89 │+    fi
[INFO] [stdout]          90 │+    if ((BASH_VERSINFO[0] >= 5 || BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3)); then
[INFO] [stdout]          91 │+        eval "declare -gn $2=$3"
[INFO] [stdout]          92 │+    elif [[ -v $2 && ! -v $3 ]]; then
[INFO] [stdout]          93 │+        printf -v "$3" %s "$2"
[INFO] [stdout]          94 │+    fi
[INFO] [stdout]          95 │+}
[INFO] [stdout]          96 │+
[INFO] [stdout]          97 │+# A lot of the following one-liners were taken directly from the
[INFO] [stdout]          98 │+# completion examples provided with the bash 2.04 source distribution
[INFO] [stdout]          99 │+
[INFO] [stdout]         100 │+# start of section containing compspecs that can be handled within bash
[INFO] [stdout]         101 │+
[INFO] [stdout]         102 │+# user commands see only users
[INFO] [stdout]         103 │+complete -u groups slay w sux
[INFO] [stdout]         104 │+
[INFO] [stdout]         105 │+# bg completes with stopped jobs
[INFO] [stdout]         106 │+complete -A stopped -P '"%' -S '"' bg
[INFO] [stdout]         107 │+
[INFO] [stdout]         108 │+# other job commands
[INFO] [stdout]         109 │+complete -j -P '"%' -S '"' fg jobs disown
[INFO] [stdout]         110 │+
[INFO] [stdout]         111 │+# readonly and unset complete with shell variables
[INFO] [stdout]         112 │+complete -v readonly unset
[INFO] [stdout]         113 │+
[INFO] [stdout]         114 │+# shopt completes with shopt options
[INFO] [stdout]         115 │+complete -A shopt shopt
[INFO] [stdout]         116 │+
[INFO] [stdout]         117 │+# unalias completes with aliases
[INFO] [stdout]         118 │+complete -a unalias
[INFO] [stdout]         119 │+
[INFO] [stdout]         120 │+# type and which complete on commands
[INFO] [stdout]         121 │+complete -c command type which
[INFO] [stdout]         122 │+
[INFO] [stdout]         123 │+# builtin completes on builtins
[INFO] [stdout]         124 │+complete -b builtin
[INFO] [stdout]         125 │+
[INFO] [stdout]         126 │+# start of section containing completion functions called by other functions
[INFO] [stdout]         127 │+
[INFO] [stdout]         128 │+# Check if we're running on the given userland
[INFO] [stdout]         129 │+# @param $1 userland to check for
[INFO] [stdout]         130 │+# @since 2.12
[INFO] [stdout]         131 │+_comp_userland()
[INFO] [stdout]         132 │+{
[INFO] [stdout]         133 │+    local userland=$(uname -s)
[INFO] [stdout]         134 │+    [[ $userland == @(Linux|GNU/*) ]] && userland=GNU
[INFO] [stdout]         135 │+    [[ $userland == "$1" ]]
[INFO] [stdout]         136 │+}
[INFO] [stdout]         137 │+
[INFO] [stdout]         138 │+# This function sets correct SysV init directories
[INFO] [stdout]         139 │+#
[INFO] [stdout]         140 │+# @since 2.12
[INFO] [stdout]         141 │+_comp_sysvdirs()
[INFO] [stdout]         142 │+{
[INFO] [stdout]         143 │+    sysvdirs=()
[INFO] [stdout]         144 │+    [[ -d /etc/rc.d/init.d ]] && sysvdirs+=(/etc/rc.d/init.d)
[INFO] [stdout]         145 │+    [[ -d /etc/init.d ]] && sysvdirs+=(/etc/init.d)
[INFO] [stdout]         146 │+    # Slackware uses /etc/rc.d
[INFO] [stdout]         147 │+    [[ -f /etc/slackware-version ]] && sysvdirs=(/etc/rc.d)
[INFO] [stdout]         148 │+    ((${#sysvdirs[@]}))
[INFO] [stdout]         149 │+}
[INFO] [stdout]         150 │+
[INFO] [stdout]         151 │+# This function checks whether we have a given program on the system.
[INFO] [stdout]         152 │+#
[INFO] [stdout]         153 │+# @since 2.12
[INFO] [stdout]         154 │+_comp_have_command()
[INFO] [stdout]         155 │+{
[INFO] [stdout]         156 │+    # Completions for system administrator commands are installed as well in
[INFO] [stdout]         157 │+    # case completion is attempted via `sudo command ...'.
[INFO] [stdout]         158 │+    PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin type "$1" &>/dev/null
[INFO] [stdout]         159 │+}
[INFO] [stdout]         160 │+
[INFO] [stdout]         161 │+# This function checks whether a given readline variable
[INFO] [stdout]         162 │+# is `on'.
[INFO] [stdout]         163 │+#
[INFO] [stdout]         164 │+# @since 2.12
[INFO] [stdout]         165 │+_comp_readline_variable_on()
[INFO] [stdout]         166 │+{
[INFO] [stdout]         167 │+    [[ $(bind -v) == *$1+([[:space:]])on* ]]
[INFO] [stdout]         168 │+}
[INFO] [stdout]         169 │+
[INFO] [stdout]         170 │+# This function shell-quotes the argument
[INFO] [stdout]         171 │+# @param    $1  String to be quoted
[INFO] [stdout]         172 │+# @var[out] REPLY Resulting string
[INFO] [stdout]         173 │+# @since 2.12
[INFO] [stdout]         174 │+_comp_quote()
[INFO] [stdout]         175 │+{
[INFO] [stdout]         176 │+    REPLY=\'${1//\'/\'\\\'\'}\'
[INFO] [stdout]         177 │+}
[INFO] [stdout]         178 │+
[INFO] [stdout]         179 │+# shellcheck disable=SC1003
[INFO] [stdout]         180 │+_comp_dequote__initialize()
[INFO] [stdout]         181 │+{
[INFO] [stdout]         182 │+    local regex_param='\$([_a-zA-Z][_a-zA-Z0-9]*|[-*@#?$!0-9_])|\$\{[!#]?([_a-zA-Z][_a-zA-Z0-9]*(\[([0-9]+|[*@])\])?|[-*@#?$!0-9_])\}'
[INFO] [stdout]         183 │+    local regex_quoted='\\.|'\''[^'\'']*'\''|\$?"([^\"$`!]|'$regex_param'|\\.)*"|\$'\''([^\'\'']|\\.)*'\'''
[INFO] [stdout]         184 │+    _comp_dequote__regex_safe_word='^([^\'\''"$`;&|<>()!]|'$regex_quoted'|'$regex_param')*$'
[INFO] [stdout]         185 │+    unset -f "$FUNCNAME"
[INFO] [stdout]         186 │+}
[INFO] [stdout]         187 │+_comp_dequote__initialize
[INFO] [stdout]         188 │+
[INFO] [stdout]         189 │+# This function expands a word using `eval` in a safe way.  This function can
[INFO] [stdout]         190 │+# be typically used to get the expanded value of `${word[i]}` as
[INFO] [stdout]         191 │+# `_comp_dequote "${word[i]}"`.  When the word contains unquoted shell special
[INFO] [stdout]         192 │+# characters, command substitutions, and other unsafe strings, the function
[INFO] [stdout]         193 │+# call fails before applying `eval`.  Otherwise, `eval` is applied to the
[INFO] [stdout]         194 │+# string to generate the result.
[INFO] [stdout]         195 │+#
[INFO] [stdout]         196 │+# @param    $1  String to be expanded.  A safe word consists of the following
[INFO] [stdout]         197 │+#               sequence of substrings:
[INFO] [stdout]         198 │+#
[INFO] [stdout]         199 │+#               - Shell non-special characters: [^\'"$`;&|<>()!].
[INFO] [stdout]         200 │+#               - Parameter expansions of the forms $PARAM, ${!PARAM},
[INFO] [stdout]         201 │+#                 ${#PARAM}, ${NAME[INDEX]}, ${!NAME[INDEX]}, ${#NAME[INDEX]}
[INFO] [stdout]         202 │+#                 where INDEX is an integer, `*` or `@`, NAME is a valid
[INFO] [stdout]         203 │+#                 variable name [_a-zA-Z][_a-zA-Z0-9]*, and PARAM is NAME or a
[INFO] [stdout]         204 │+#                 parameter [-*@#?$!0-9_].
[INFO] [stdout]         205 │+#               - Quotes \?, '...', "...", $'...', and $"...".  In the double
[INFO] [stdout]         206 │+#                 quotations, parameter expansions are allowed.
[INFO] [stdout]         207 │+#
[INFO] [stdout]         208 │+# @var[out] REPLY  Array that contains the expanded results.  Multiple words or
[INFO] [stdout]         209 │+#                  no words may be generated through pathname expansions.
[INFO] [stdout]         210 │+#
[INFO] [stdout]         211 │+# Note: This function allows parameter expansions as safe strings, which might
[INFO] [stdout]         212 │+# cause unexpected results:
[INFO] [stdout]         213 │+#
[INFO] [stdout]         214 │+# * This allows execution of arbitrary commands through extra expansions of
[INFO] [stdout]         215 │+#   array subscripts in name references. For example,
[INFO] [stdout]         216 │+#
[INFO] [stdout]         217 │+#     declare -n v='dummy[$(echo xxx >/dev/tty)]'
[INFO] [stdout]         218 │+#     echo "$v"            # This line executes the command 'echo xxx'.
[INFO] [stdout]         219 │+#     _comp_dequote '"$v"' # This line also executes it.
[INFO] [stdout]         220 │+#
[INFO] [stdout]         221 │+# * This may change the internal state of the variable that has side effects.
[INFO] [stdout]         222 │+#   For example, the state of the random number generator of RANDOM can change:
[INFO] [stdout]         223 │+#
[INFO] [stdout]         224 │+#     RANDOM=1234               # Set seed
[INFO] [stdout]         225 │+#     echo "$RANDOM"            # This produces 30658.
[INFO] [stdout]         226 │+#     RANDOM=1234               # Reset seed
[INFO] [stdout]         227 │+#     _comp_dequote '"$RANDOM"' # This line changes the internal state.
[INFO] [stdout]         228 │+#     echo "$RANDOM"            # This fails to reproduce 30658.
[INFO] [stdout]         229 │+#
[INFO] [stdout]         230 │+# We allow these parameter expansions as a part of safe strings assuming the
[INFO] [stdout]         231 │+# referential transparency of the simple parameter expansions and the sane
[INFO] [stdout]         232 │+# setup of the variables by the user or other frameworks that the user loads.
[INFO] [stdout]         233 │+# @since 2.12
[INFO] [stdout]         234 │+_comp_dequote()
[INFO] [stdout]         235 │+{
[INFO] [stdout]         236 │+    REPLY=() # fallback value for unsafe word and failglob
[INFO] [stdout]         237 │+    [[ $1 =~ $_comp_dequote__regex_safe_word ]] || return 1
[INFO] [stdout]         238 │+    eval "REPLY=($1)" 2>/dev/null # may produce failglob
[INFO] [stdout]         239 │+}
[INFO] [stdout]         240 │+
[INFO] [stdout]         241 │+# Unset the given variables across a scope boundary. Useful for unshadowing
[INFO] [stdout]         242 │+# global scoped variables. Note that simply calling unset on a local variable
[INFO] [stdout]         243 │+# will not unshadow the global variable. Rather, the result will be a local
[INFO] [stdout]         244 │+# variable in an unset state.
[INFO] [stdout]         245 │+# Usage: local IFS='|'; _comp_unlocal IFS
[INFO] [stdout]         246 │+# @param $* Variable names to be unset
[INFO] [stdout]         247 │+# @since 2.12
[INFO] [stdout]         248 │+_comp_unlocal()
[INFO] [stdout]         249 │+{
[INFO] [stdout]         250 │+    if ((BASH_VERSINFO[0] >= 5)) && shopt -q localvar_unset; then
[INFO] [stdout]         251 │+        shopt -u localvar_unset
[INFO] [stdout]         252 │+        unset -v "$@"
[INFO] [stdout]         253 │+        shopt -s localvar_unset
[INFO] [stdout]         254 │+    else
[INFO] [stdout]         255 │+        unset -v "$@"
[INFO] [stdout]         256 │+    fi
[INFO] [stdout]         257 │+}
[INFO] [stdout]         258 │+
[INFO] [stdout]         259 │+# Assign variables one scope above the caller
[INFO] [stdout]         260 │+# Usage: local varname [varname ...] &&
[INFO] [stdout]         261 │+#        _comp_upvars [-v varname value] | [-aN varname [value ...]] ...
[INFO] [stdout]         262 │+# Available OPTIONS:
[INFO] [stdout]         263 │+#     -aN  Assign next N values to varname as array
[INFO] [stdout]         264 │+#     -v   Assign single value to varname
[INFO] [stdout]         265 │+# @return  1 if error occurs
[INFO] [stdout]         266 │+# @see https://fvue.nl/wiki/Bash:_Passing_variables_by_reference
[INFO] [stdout]         267 │+# @since 2.12
[INFO] [stdout]         268 │+_comp_upvars()
[INFO] [stdout]         269 │+{
[INFO] [stdout]         270 │+    if ! (($#)); then
[INFO] [stdout]         271 │+        echo "bash_completion: $FUNCNAME: usage: $FUNCNAME" \
[INFO] [stdout]         272 │+            "[-v varname value] | [-aN varname [value ...]] ..." >&2
[INFO] [stdout]         273 │+        return 2
[INFO] [stdout]         274 │+    fi
[INFO] [stdout]         275 │+    while (($#)); do
[INFO] [stdout]         276 │+        case $1 in
[INFO] [stdout]         277 │+            -a*)
[INFO] [stdout]         278 │+                # Error checking
[INFO] [stdout]         279 │+                [[ ${1#-a} ]] || {
[INFO] [stdout]         280 │+                    echo "bash_completion: $FUNCNAME:" \
[INFO] [stdout]         281 │+                        "\`$1': missing number specifier" >&2
[INFO] [stdout]         282 │+                    return 1
[INFO] [stdout]         283 │+                }
[INFO] [stdout]         284 │+                printf %d "${1#-a}" &>/dev/null || {
[INFO] [stdout]         285 │+                    echo bash_completion: \
[INFO] [stdout]         286 │+                        "$FUNCNAME: \`$1': invalid number specifier" >&2
[INFO] [stdout]         287 │+                    return 1
[INFO] [stdout]         288 │+                }
[INFO] [stdout]         289 │+                # Assign array of -aN elements
[INFO] [stdout]         290 │+                # shellcheck disable=SC2015,SC2140  # TODO
[INFO] [stdout]         291 │+                [[ $2 ]] && unset -v "$2" && eval "$2"=\(\"\$"{@:3:${1#-a}}"\"\) &&
[INFO] [stdout]         292 │+                    shift $((${1#-a} + 2)) || {
[INFO] [stdout]         293 │+                    echo bash_completion: \
[INFO] [stdout]         294 │+                        "$FUNCNAME: \`$1${2+ }$2': missing argument(s)" \
[INFO] [stdout]         295 │+                        >&2
[INFO] [stdout]         296 │+                    return 1
[INFO] [stdout]         297 │+                }
[INFO] [stdout]         298 │+                ;;
[INFO] [stdout]         299 │+            -v)
[INFO] [stdout]         300 │+                # Assign single value
[INFO] [stdout]         301 │+                # shellcheck disable=SC2015  # TODO
[INFO] [stdout]         302 │+                [[ $2 ]] && unset -v "$2" && eval "$2"=\"\$3\" &&
[INFO] [stdout]         303 │+                    shift 3 || {
[INFO] [stdout]         304 │+                    echo "bash_completion: $FUNCNAME: $1:" \
[INFO] [stdout]         305 │+                        "missing argument(s)" >&2
[INFO] [stdout]         306 │+                    return 1
[INFO] [stdout]         307 │+                }
[INFO] [stdout]         308 │+                ;;
[INFO] [stdout]         309 │+            *)
[INFO] [stdout]         310 │+                echo "bash_completion: $FUNCNAME: $1: invalid option" >&2
[INFO] [stdout]         311 │+                return 1
[INFO] [stdout]         312 │+                ;;
[INFO] [stdout]         313 │+        esac
[INFO] [stdout]         314 │+    done
[INFO] [stdout]         315 │+}
[INFO] [stdout]         316 │+
[INFO] [stdout]         317 │+# Get the list of filenames that match with the specified glob pattern.
[INFO] [stdout]         318 │+# This function does the globbing in a controlled environment, avoiding
[INFO] [stdout]         319 │+# interference from user's shell options/settings or environment variables.
[INFO] [stdout]         320 │+# @param $1 array_name  Array name
[INFO] [stdout]         321 │+#   The array name should not start with an underscore "_", which is internally
[INFO] [stdout]         322 │+#   used.  The array name should not be "GLOBIGNORE" or "GLOBSORT".
[INFO] [stdout]         323 │+# @param $2 pattern     Pattern string to be evaluated.
[INFO] [stdout]         324 │+#   This pattern string will be evaluated using "eval", so brace expansions,
[INFO] [stdout]         325 │+#   parameter expansions, command substitutions, and other expansions will be
[INFO] [stdout]         326 │+#   processed.  The user-provided strings should not be directly specified to
[INFO] [stdout]         327 │+#   this argument.
[INFO] [stdout]         328 │+# @return 0 if at least one path is generated, 1 if no path is generated, or 2
[INFO] [stdout]         329 │+#   if the usage is incorrect.
[INFO] [stdout]         330 │+# @since 2.12
[INFO] [stdout]         331 │+_comp_expand_glob()
[INFO] [stdout]         332 │+{
[INFO] [stdout]         333 │+    if (($# != 2)); then
[INFO] [stdout]         334 │+        printf 'bash-completion: %s: unexpected number of arguments\n' "$FUNCNAME" >&2
[INFO] [stdout]         335 │+        printf 'usage: %s ARRAY_NAME PATTERN\n' "$FUNCNAME" >&2
[INFO] [stdout]         336 │+        return 2
[INFO] [stdout]         337 │+    elif [[ $1 == @(GLOBIGNORE|GLOBSORT|_*|*[^_a-zA-Z0-9]*|[0-9]*|'') ]]; then
[INFO] [stdout]         338 │+        printf 'bash-completion: %s: invalid array name "%s"\n' "$FUNCNAME" "$1" >&2
[INFO] [stdout]         339 │+        return 2
[INFO] [stdout]         340 │+    fi
[INFO] [stdout]         341 │+
[INFO] [stdout]         342 │+    # Save and adjust the settings.
[INFO] [stdout]         343 │+    local _original_opts=$SHELLOPTS:$BASHOPTS
[INFO] [stdout]         344 │+    set +o noglob
[INFO] [stdout]         345 │+    shopt -s nullglob
[INFO] [stdout]         346 │+    shopt -u failglob dotglob
[INFO] [stdout]         347 │+
[INFO] [stdout]         348 │+    # Also the user's GLOBIGNORE and GLOBSORT (bash >= 5.3) may affect the
[INFO] [stdout]         349 │+    # result of pathname expansions.
[INFO] [stdout]         350 │+    local GLOBIGNORE="" GLOBSORT=name
[INFO] [stdout]         351 │+
[INFO] [stdout]         352 │+    # To canonicalize the sorting order of the generated paths, we set
[INFO] [stdout]         353 │+    # LC_COLLATE=C and unset LC_ALL while preserving LC_CTYPE.
[INFO] [stdout]         354 │+    local LC_COLLATE=C LC_CTYPE=${LC_ALL:-${LC_CTYPE:-${LANG-}}} LC_ALL=
[INFO] [stdout]         355 │+
[INFO] [stdout]         356 │+    eval -- "$1=()" # a fallback in case that the next line fails.
[INFO] [stdout]         357 │+    eval -- "$1=($2)"
[INFO] [stdout]         358 │+
[INFO] [stdout]         359 │+    # Restore the settings.  Note: Changing GLOBIGNORE affects the state of
[INFO] [stdout]         360 │+    # "shopt -q dotglob", so we need to explicitly restore the original state
[INFO] [stdout]         361 │+    # of "shopt -q dotglob".
[INFO] [stdout]         362 │+    _comp_unlocal GLOBIGNORE
[INFO] [stdout]         363 │+    if [[ :$_original_opts: == *:dotglob:* ]]; then
[INFO] [stdout]         364 │+        shopt -s dotglob
[INFO] [stdout]         365 │+    else
[INFO] [stdout]         366 │+        shopt -u dotglob
[INFO] [stdout]         367 │+    fi
[INFO] [stdout]         368 │+    [[ :$_original_opts: == *:nullglob:* ]] || shopt -u nullglob
[INFO] [stdout]         369 │+    [[ :$_original_opts: == *:failglob:* ]] && shopt -s failglob
[INFO] [stdout]         370 │+    [[ :$_original_opts: == *:noglob:* ]] && set -o noglob
[INFO] [stdout]         371 │+    eval "((\${#$1[@]}))"
[INFO] [stdout]         372 │+}
[INFO] [stdout]         373 │+
[INFO] [stdout]         374 │+# Split a string and assign to an array.  This function basically performs
[INFO] [stdout]         375 │+# `IFS=<sep>; <array_name>=(<text>)` but properly handles saving/restoring the
[INFO] [stdout]         376 │+# state of `IFS` and the shell option `noglob`.  A naive splitting by
[INFO] [stdout]         377 │+# `arr=(...)` suffers from unexpected IFS and pathname expansions, so one
[INFO] [stdout]         378 │+# should prefer this function to such naive splitting.
[INFO] [stdout]         379 │+# OPTIONS
[INFO] [stdout]         380 │+#   -a      Append to the array
[INFO] [stdout]         381 │+#   -F sep  Set a set of separator characters (used as IFS).  The default
[INFO] [stdout]         382 │+#           separator is $' \t\n'
[INFO] [stdout]         383 │+#   -l      The same as -F $'\n'
[INFO] [stdout]         384 │+# @param $1 array_name  The array name
[INFO] [stdout]         385 │+#   The array name should not start with an underscores "_", which is
[INFO] [stdout]         386 │+#   internally used.  The array name should not be either "IFS" or
[INFO] [stdout]         387 │+#   "OPT{IND,ARG,ERR}".
[INFO] [stdout]         388 │+# @param $2 text        The string to split
[INFO] [stdout]         389 │+# @return 2 when the usage is wrong, 0 when one or more completions are
[INFO] [stdout]         390 │+#   generated, or 1 when the execution succeeds but no candidates are
[INFO] [stdout]         391 │+#   generated.
[INFO] [stdout]         392 │+# @since 2.12
[INFO] [stdout]         393 │+_comp_split()
[INFO] [stdout]         394 │+{
[INFO] [stdout]         395 │+    local _append="" IFS=$' \t\n'
[INFO] [stdout]         396 │+
[INFO] [stdout]         397 │+    local OPTIND=1 OPTARG="" OPTERR=0 _opt
[INFO] [stdout]         398 │+    while getopts ':alF:' _opt "$@"; do
[INFO] [stdout]         399 │+        case $_opt in
[INFO] [stdout]         400 │+            a) _append=set ;;
[INFO] [stdout]         401 │+            l) IFS=$'\n' ;;
[INFO] [stdout]         402 │+            F) IFS=$OPTARG ;;
[INFO] [stdout]         403 │+            *)
[INFO] [stdout]         404 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]         405 │+                return 2
[INFO] [stdout]         406 │+                ;;
[INFO] [stdout]         407 │+        esac
[INFO] [stdout]         408 │+    done
[INFO] [stdout]         409 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]         410 │+    if (($# != 2)); then
[INFO] [stdout]         411 │+        printf '%s\n' "bash_completion: $FUNCNAME: unexpected number of arguments" >&2
[INFO] [stdout]         412 │+        printf '%s\n' "usage: $FUNCNAME [-al] [-F SEP] ARRAY_NAME TEXT" >&2
[INFO] [stdout]         413 │+        return 2
[INFO] [stdout]         414 │+    elif [[ $1 == @(*[^_a-zA-Z0-9]*|[0-9]*|''|_*|IFS|OPTIND|OPTARG|OPTERR) ]]; then
[INFO] [stdout]         415 │+        printf '%s\n' "bash_completion: $FUNCNAME: invalid array name '$1'" >&2
[INFO] [stdout]         416 │+        return 2
[INFO] [stdout]         417 │+    fi
[INFO] [stdout]         418 │+
[INFO] [stdout]         419 │+    local _original_opts=$SHELLOPTS
[INFO] [stdout]         420 │+    set -o noglob
[INFO] [stdout]         421 │+
[INFO] [stdout]         422 │+    local _old_size _new_size
[INFO] [stdout]         423 │+    if [[ $_append ]]; then
[INFO] [stdout]         424 │+        eval "$1+=()" # in case $1 is unset
[INFO] [stdout]         425 │+        eval "_old_size=\${#$1[@]}"
[INFO] [stdout]         426 │+        eval "$1+=(\$2)"
[INFO] [stdout]         427 │+    else
[INFO] [stdout]         428 │+        _old_size=0
[INFO] [stdout]         429 │+        eval "$1=(\$2)"
[INFO] [stdout]         430 │+    fi
[INFO] [stdout]         431 │+    eval "_new_size=\${#$1[@]}"
[INFO] [stdout]         432 │+
[INFO] [stdout]         433 │+    [[ :$_original_opts: == *:noglob:* ]] || set +o noglob
[INFO] [stdout]         434 │+    ((_new_size > _old_size))
[INFO] [stdout]         435 │+}
[INFO] [stdout]         436 │+
[INFO] [stdout]         437 │+# Helper function for _comp_compgen
[INFO] [stdout]         438 │+# @var[in] $?
[INFO] [stdout]         439 │+# @var[in] _var
[INFO] [stdout]         440 │+# @var[in] _append
[INFO] [stdout]         441 │+# @return original $?
[INFO] [stdout]         442 │+_comp_compgen__error_fallback()
[INFO] [stdout]         443 │+{
[INFO] [stdout]         444 │+    local _status=$?
[INFO] [stdout]         445 │+    if [[ $_append ]]; then
[INFO] [stdout]         446 │+        # make sure existence of variable
[INFO] [stdout]         447 │+        eval -- "$_var+=()"
[INFO] [stdout]         448 │+    else
[INFO] [stdout]         449 │+        eval -- "$_var=()"
[INFO] [stdout]         450 │+    fi
[INFO] [stdout]         451 │+    return "$_status"
[INFO] [stdout]         452 │+}
[INFO] [stdout]         453 │+
[INFO] [stdout]         454 │+# Provide a common interface to generate completion candidates in COMPREPLY or
[INFO] [stdout]         455 │+# in a specified array.
[INFO] [stdout]         456 │+# OPTIONS
[INFO] [stdout]         457 │+#   -a      Append to the array
[INFO] [stdout]         458 │+#   -v arr  Store the results to the array ARR. The default is `COMPREPLY`.
[INFO] [stdout]         459 │+#           The array name should not start with an underscores "_", which is
[INFO] [stdout]         460 │+#           internally used.  The array name should not be any of "cur", "IFS"
[INFO] [stdout]         461 │+#           or "OPT{IND,ARG,ERR}".
[INFO] [stdout]         462 │+#   -U var  Unlocalize VAR before performing the assignments.  This option can
[INFO] [stdout]         463 │+#           be specified multiple times to register multiple variables.  This
[INFO] [stdout]         464 │+#           option is supposed to be used in implementing a generator (G1) when
[INFO] [stdout]         465 │+#           G1 defines a local variable name that does not start with `_`.  In
[INFO] [stdout]         466 │+#           such a case, when the target variable specified to G1 by `-v VAR1`
[INFO] [stdout]         467 │+#           conflicts with the local variable, the assignment to the target
[INFO] [stdout]         468 │+#           variable fails to propagate outside G1.  To avoid such a situation,
[INFO] [stdout]         469 │+#           G1 can call `_comp_compgen` with `-U VAR` to unlocalize `VAR`
[INFO] [stdout]         470 │+#           before accessing the target variable.  For a builtin compgen call
[INFO] [stdout]         471 │+#           (i.e., _comp_compgen [options] -- options), VAR is unlocalized
[INFO] [stdout]         472 │+#           after calling the builtin `compgen` but before assigning results to
[INFO] [stdout]         473 │+#           the target array.  For a generator call (i.e., _comp_compgen
[INFO] [stdout]         474 │+#           [options] G2 ...), VAR is unlocalized before calling the child
[INFO] [stdout]         475 │+#           generator function `_comp_compgen_G2`.
[INFO] [stdout]         476 │+#   -c cur  Set a word used as a prefix to filter the completions.  The default
[INFO] [stdout]         477 │+#           is ${cur-}.
[INFO] [stdout]         478 │+#   -R      The same as -c ''.  Use raw outputs without filtering.
[INFO] [stdout]         479 │+#   -C dir  Evaluate compgen/generator in the specified directory.
[INFO] [stdout]         480 │+# @var[in,opt] cur  Used as the default value of a prefix to filter the
[INFO] [stdout]         481 │+#   completions.
[INFO] [stdout]         482 │+#
[INFO] [stdout]         483 │+# Usage #1: _comp_compgen [-alR|-F sep|-v arr|-c cur|-C dir] -- options...
[INFO] [stdout]         484 │+# Call `compgen` with the specified arguments and store the results in the
[INFO] [stdout]         485 │+# specified array.  This function essentially performs arr=($(compgen args...))
[INFO] [stdout]         486 │+# but properly handles shell options, IFS, etc. using _comp_split.  This
[INFO] [stdout]         487 │+# function is equivalent to `_comp_split [-a] -l arr "$(IFS=sep; compgen
[INFO] [stdout]         488 │+# args... -- cur)"`, but this pattern is frequent in the codebase and is good
[INFO] [stdout]         489 │+# to separate out as a function for the possible future implementation change.
[INFO] [stdout]         490 │+# OPTIONS
[INFO] [stdout]         491 │+#   -F sep  Set a set of separator characters (used as IFS in evaluating
[INFO] [stdout]         492 │+#           `compgen').  The default separator is $' \t\n'.  Note that this is
[INFO] [stdout]         493 │+#           not the set of separators to delimit output of `compgen', but the
[INFO] [stdout]         494 │+#           separators in evaluating the expansions of `-W '...'`, etc.  The
[INFO] [stdout]         495 │+#           delimiter of the output of `compgen` is always a newline.
[INFO] [stdout]         496 │+#   -l      The same as -F $'\n'.  Use lines as words in evaluating compgen.
[INFO] [stdout]         497 │+# @param $1... options  Arguments that are passed to compgen (if $1 starts with
[INFO] [stdout]         498 │+#   a hyphen `-`).
[INFO] [stdout]         499 │+#
[INFO] [stdout]         500 │+#   Note: References to positional parameters $1, $2, ... (such as -W '$1')
[INFO] [stdout]         501 │+#   will not work as expected because these reference the arguments of
[INFO] [stdout]         502 │+#   `_comp_compgen' instead of those of the caller function.  When there are
[INFO] [stdout]         503 │+#   needs to reference them, save the arguments to an array and reference the
[INFO] [stdout]         504 │+#   array instead.
[INFO] [stdout]         505 │+#
[INFO] [stdout]         506 │+#   Note: The array option `-V arr` in bash >= 5.3 should be instead specified
[INFO] [stdout]         507 │+#   as `-v arr` as a part of the `_comp_compgen` options.
[INFO] [stdout]         508 │+# @return  True (0) if at least one completion is generated, False (1) if no
[INFO] [stdout]         509 │+#   completion is generated, or 2 with an incorrect usage.
[INFO] [stdout]         510 │+#
[INFO] [stdout]         511 │+# Usage #2: _comp_compgen [-aR|-v arr|-c cur|-C dir|-i cmd|-x cmd] name args...
[INFO] [stdout]         512 │+# Call the generator `_comp_compgen_NAME ARGS...` with the specified options.
[INFO] [stdout]         513 │+# This provides a common interface to call the functions `_comp_compgen_NAME`,
[INFO] [stdout]         514 │+# which produce completion candidates, with custom options [-alR|-v arr|-c
[INFO] [stdout]         515 │+# cur].  The option `-F sep` is not used with this usage.
[INFO] [stdout]         516 │+# OPTIONS
[INFO] [stdout]         517 │+#   -x cmd  Call exported generator `_comp_xfunc_CMD_compgen_NAME`
[INFO] [stdout]         518 │+#   -i cmd  Call internal generator `_comp_cmd_CMD__compgen_NAME`
[INFO] [stdout]         519 │+# @param $1... name args  Calls the function _comp_compgen_NAME with the
[INFO] [stdout]         520 │+#   specified ARGS (if $1 does not start with a hyphen `-`).  The options
[INFO] [stdout]         521 │+#   [-alR|-v arr|-c cur] are inherited by the child calls of `_comp_compgen`
[INFO] [stdout]         522 │+#   inside `_comp_compgen_NAME` unless the child call `_comp_compgen` receives
[INFO] [stdout]         523 │+#   overriding options.
[INFO] [stdout]         524 │+# @var[in,opt,internal] _comp_compgen__append
[INFO] [stdout]         525 │+# @var[in,opt,internal] _comp_compgen__var
[INFO] [stdout]         526 │+# @var[in,opt,internal] _comp_compgen__cur
[INFO] [stdout]         527 │+#   These variables are internally used to pass the effect of the options
[INFO] [stdout]         528 │+#   [-alR|-v arr|-c cur] to the child calls of `_comp_compgen` in
[INFO] [stdout]         529 │+#   `_comp_compgen_NAME`.
[INFO] [stdout]         530 │+# @return   Exit status of the generator.
[INFO] [stdout]         531 │+#
[INFO] [stdout]         532 │+# @remarks When no options are supplied to _comp_compgen, `_comp_compgen NAME
[INFO] [stdout]         533 │+# args` is equivalent to the direct call `_comp_compgen_NAME args`.  As the
[INFO] [stdout]         534 │+# direct call is slightly more efficient, the direct call is preferred over
[INFO] [stdout]         535 │+# calling it through `_comp_compgen`.
[INFO] [stdout]         536 │+#
[INFO] [stdout]         537 │+# @remarks Design `_comp_compgen_NAME`: a function that produce completions can
[INFO] [stdout]         538 │+# be defined with the name _comp_compgen_NAME.  The function is supposed to
[INFO] [stdout]         539 │+# generate completions by calling `_comp_compgen`.  To reflect the options
[INFO] [stdout]         540 │+# specified to the outer calls of `_comp_compgen`, the function should not
[INFO] [stdout]         541 │+# directly modify `COMPREPLY`.  To add words, one can call
[INFO] [stdout]         542 │+#
[INFO] [stdout]         543 │+#     _comp_compgen -- -W '"${words[@]}"'
[INFO] [stdout]         544 │+#
[INFO] [stdout]         545 │+# To directly add words without filtering by `cur`, one can call
[INFO] [stdout]         546 │+#
[INFO] [stdout]         547 │+#     _comp_compgen -R -- -W '"${words[@]}"'
[INFO] [stdout]         548 │+#
[INFO] [stdout]         549 │+# or use the utility `_comp_compgen_set`:
[INFO] [stdout]         550 │+#
[INFO] [stdout]         551 │+#     _comp_compgen_set "${words[@]}"
[INFO] [stdout]         552 │+#
[INFO] [stdout]         553 │+# Other nested calls of _comp_compgen can also be used.  The function is
[INFO] [stdout]         554 │+# supposed to replace the existing content of the array by default to allow the
[INFO] [stdout]         555 │+# caller control whether to replace or append by the option `-a`.
[INFO] [stdout]         556 │+#
[INFO] [stdout]         557 │+# @since 2.12
[INFO] [stdout]         558 │+_comp_compgen()
[INFO] [stdout]         559 │+{
[INFO] [stdout]         560 │+    local _append=
[INFO] [stdout]         561 │+    local _var=
[INFO] [stdout]         562 │+    local _cur=${_comp_compgen__cur-${cur-}}
[INFO] [stdout]         563 │+    local _dir=""
[INFO] [stdout]         564 │+    local _ifs=$' \t\n' _has_ifs=""
[INFO] [stdout]         565 │+    local _icmd="" _xcmd=""
[INFO] [stdout]         566 │+    local -a _upvars=()
[INFO] [stdout]         567 │+
[INFO] [stdout]         568 │+    local _old_nocasematch=""
[INFO] [stdout]         569 │+    if shopt -q nocasematch; then
[INFO] [stdout]         570 │+        _old_nocasematch=set
[INFO] [stdout]         571 │+        shopt -u nocasematch
[INFO] [stdout]         572 │+    fi
[INFO] [stdout]         573 │+    local OPTIND=1 OPTARG="" OPTERR=0 _opt
[INFO] [stdout]         574 │+    while getopts ':av:U:Rc:C:lF:i:x:' _opt "$@"; do
[INFO] [stdout]         575 │+        case $_opt in
[INFO] [stdout]         576 │+            a) _append=set ;;
[INFO] [stdout]         577 │+            v)
[INFO] [stdout]         578 │+                if [[ $OPTARG == @(*[^_a-zA-Z0-9]*|[0-9]*|''|_*|IFS|OPTIND|OPTARG|OPTERR|cur) ]]; then
[INFO] [stdout]         579 │+                    printf 'bash_completion: %s: -v: invalid array name `%s'\''\n' "$FUNCNAME" "$OPTARG" >&2
[INFO] [stdout]         580 │+                    return 2
[INFO] [stdout]         581 │+                fi
[INFO] [stdout]         582 │+                _var=$OPTARG
[INFO] [stdout]         583 │+                ;;
[INFO] [stdout]         584 │+            U)
[INFO] [stdout]         585 │+                if [[ $OPTARG == @(*[^_a-zA-Z0-9]*|[0-9]*|'') ]]; then
[INFO] [stdout]         586 │+                    printf 'bash_completion: %s: -U: invalid variable name `%s'\''\n' "$FUNCNAME" "$OPTARG" >&2
[INFO] [stdout]         587 │+                    return 2
[INFO] [stdout]         588 │+                elif [[ $OPTARG == @(_*|IFS|OPTIND|OPTARG|OPTERR|cur) ]]; then
[INFO] [stdout]         589 │+                    printf 'bash_completion: %s: -U: unnecessary to mark `%s'\'' as upvar\n' "$FUNCNAME" "$OPTARG" >&2
[INFO] [stdout]         590 │+                    return 2
[INFO] [stdout]         591 │+                fi
[INFO] [stdout]         592 │+                _upvars+=("$OPTARG")
[INFO] [stdout]         593 │+                ;;
[INFO] [stdout]         594 │+            c) _cur=$OPTARG ;;
[INFO] [stdout]         595 │+            R) _cur="" ;;
[INFO] [stdout]         596 │+            C)
[INFO] [stdout]         597 │+                if [[ ! $OPTARG ]]; then
[INFO] [stdout]         598 │+                    printf 'bash_completion: %s: -C: invalid directory name `%s'\''\n' "$FUNCNAME" "$OPTARG" >&2
[INFO] [stdout]         599 │+                    return 2
[INFO] [stdout]         600 │+                fi
[INFO] [stdout]         601 │+                _dir=$OPTARG
[INFO] [stdout]         602 │+                ;;
[INFO] [stdout]         603 │+            l) _has_ifs=set _ifs=$'\n' ;;
[INFO] [stdout]         604 │+            F) _has_ifs=set _ifs=$OPTARG ;;
[INFO] [stdout]         605 │+            [ix])
[INFO] [stdout]         606 │+                if [[ ! $OPTARG ]]; then
[INFO] [stdout]         607 │+                    printf 'bash_completion: %s: -%s: invalid command name `%s'\''\n' "$FUNCNAME" "$_opt" "$OPTARG" >&2
[INFO] [stdout]         608 │+                    return 2
[INFO] [stdout]         609 │+                elif [[ $_icmd ]]; then
[INFO] [stdout]         610 │+                    printf 'bash_completion: %s: -%s: `-i %s'\'' is already specified\n' "$FUNCNAME" "$_opt" "$_icmd" >&2
[INFO] [stdout]         611 │+                    return 2
[INFO] [stdout]         612 │+                elif [[ $_xcmd ]]; then
[INFO] [stdout]         613 │+                    printf 'bash_completion: %s: -%s: `-x %s'\'' is already specified\n' "$FUNCNAME" "$_opt" "$_xcmd" >&2
[INFO] [stdout]         614 │+                    return 2
[INFO] [stdout]         615 │+                fi
[INFO] [stdout]         616 │+                ;;&
[INFO] [stdout]         617 │+            i) _icmd=$OPTARG ;;
[INFO] [stdout]         618 │+            x) _xcmd=$OPTARG ;;
[INFO] [stdout]         619 │+            *)
[INFO] [stdout]         620 │+                printf 'bash_completion: %s: usage error\n' "$FUNCNAME" >&2
[INFO] [stdout]         621 │+                return 2
[INFO] [stdout]         622 │+                ;;
[INFO] [stdout]         623 │+        esac
[INFO] [stdout]         624 │+    done
[INFO] [stdout]         625 │+    [[ $_old_nocasematch ]] && shopt -s nocasematch
[INFO] [stdout]         626 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]         627 │+    if (($# == 0)); then
[INFO] [stdout]         628 │+        printf 'bash_completion: %s: unexpected number of arguments\n' "$FUNCNAME" >&2
[INFO] [stdout]         629 │+        printf 'usage: %s [-alR|-F SEP|-v ARR|-c CUR] -- ARGS...' "$FUNCNAME" >&2
[INFO] [stdout]         630 │+        return 2
[INFO] [stdout]         631 │+    fi
[INFO] [stdout]         632 │+    if [[ ! $_var ]]; then
[INFO] [stdout]         633 │+        # Inherit _append and _var only when -v var is unspecified.
[INFO] [stdout]         634 │+        _var=${_comp_compgen__var-COMPREPLY}
[INFO] [stdout]         635 │+        [[ $_append ]] || _append=${_comp_compgen__append-}
[INFO] [stdout]         636 │+    fi
[INFO] [stdout]         637 │+
[INFO] [stdout]         638 │+    if [[ $1 != -* ]]; then
[INFO] [stdout]         639 │+        # usage: _comp_compgen [options] NAME args
[INFO] [stdout]         640 │+        if [[ $_has_ifs ]]; then
[INFO] [stdout]         641 │+            printf 'bash_completion: %s: `-l'\'' and `-F sep'\'' are not supported for generators\n' "$FUNCNAME" >&2
[INFO] [stdout]         642 │+            return 2
[INFO] [stdout]         643 │+        fi
[INFO] [stdout]         644 │+
[INFO] [stdout]         645 │+        local -a _generator
[INFO] [stdout]         646 │+        if [[ $_icmd ]]; then
[INFO] [stdout]         647 │+            _generator=("_comp_cmd_${_icmd//[^a-zA-Z0-9_]/_}__compgen_$1")
[INFO] [stdout]         648 │+        elif [[ $_xcmd ]]; then
[INFO] [stdout]         649 │+            _generator=(_comp_xfunc "$_xcmd" "compgen_$1")
[INFO] [stdout]         650 │+        else
[INFO] [stdout]         651 │+            _generator=("_comp_compgen_$1")
[INFO] [stdout]         652 │+        fi
[INFO] [stdout]         653 │+        if ! declare -F -- "${_generator[0]}" &>/dev/null; then
[INFO] [stdout]         654 │+            printf 'bash_completion: %s: unrecognized generator `%s'\'' (function %s not found)\n' "$FUNCNAME" "$1" "${_generator[0]}" >&2
[INFO] [stdout]         655 │+            return 2
[INFO] [stdout]         656 │+        fi
[INFO] [stdout]         657 │+        shift
[INFO] [stdout]         658 │+
[INFO] [stdout]         659 │+        _comp_compgen__call_generator "$@"
[INFO] [stdout]         660 │+    else
[INFO] [stdout]         661 │+        # usage: _comp_compgen [options] -- [compgen_options]
[INFO] [stdout]         662 │+        if [[ $_icmd || $_xcmd ]]; then
[INFO] [stdout]         663 │+            printf 'bash_completion: %s: generator name is unspecified for `%s'\''\n' "$FUNCNAME" "${_icmd:+-i $_icmd}${_xcmd:+x $_xcmd}" >&2
[INFO] [stdout]         664 │+            return 2
[INFO] [stdout]         665 │+        fi
[INFO] [stdout]         666 │+
[INFO] [stdout]         667 │+        # Note: $* in the below checks would be affected by uncontrolled IFS in
[INFO] [stdout]         668 │+        # bash >= 5.0, so we need to set IFS to the normal value.  The behavior
[INFO] [stdout]         669 │+        # in bash < 5.0, where unquoted $* in conditional command did not honor
[INFO] [stdout]         670 │+        # IFS, was a bug.
[INFO] [stdout]         671 │+        # Note: Also, ${_cur:+-- "$_cur"} and ${_append:+-a} would be affected
[INFO] [stdout]         672 │+        # by uncontrolled IFS.
[INFO] [stdout]         673 │+        local IFS=$' \t\n'
[INFO] [stdout]         674 │+        # Note: extglob *\$?(\{)[0-9]* can be extremely slow when the string
[INFO] [stdout]         675 │+        # "${*:2:_nopt}" becomes longer, so we test \$[0-9] and \$\{[0-9]
[INFO] [stdout]         676 │+        # separately.
[INFO] [stdout]         677 │+        if [[ $* == *\$[0-9]* || $* == *\$\{[0-9]* ]]; then
[INFO] [stdout]         678 │+            printf 'bash_completion: %s: positional parameter $1, $2, ... do not work inside this function\n' "$FUNCNAME" >&2
[INFO] [stdout]         679 │+            return 2
[INFO] [stdout]         680 │+        fi
[INFO] [stdout]         681 │+
[INFO] [stdout]         682 │+        _comp_compgen__call_builtin "$@"
[INFO] [stdout]         683 │+    fi
[INFO] [stdout]         684 │+}
[INFO] [stdout]         685 │+
[INFO] [stdout]         686 │+# Helper function for _comp_compgen.  This function calls a generator.
[INFO] [stdout]         687 │+# @param $1... generator_args
[INFO] [stdout]         688 │+# @var[in] _dir
[INFO] [stdout]         689 │+# @var[in] _cur
[INFO] [stdout]         690 │+# @arr[in] _generator
[INFO] [stdout]         691 │+# @arr[in] _upvars
[INFO] [stdout]         692 │+# @var[in] _append
[INFO] [stdout]         693 │+# @var[in] _var
[INFO] [stdout]         694 │+_comp_compgen__call_generator()
[INFO] [stdout]         695 │+{
[INFO] [stdout]         696 │+    ((${#_upvars[@]})) && _comp_unlocal "${_upvars[@]}"
[INFO] [stdout]         697 │+
[INFO] [stdout]         698 │+    if [[ $_dir ]]; then
[INFO] [stdout]         699 │+        local _original_pwd=$PWD
[INFO] [stdout]         700 │+        local PWD=${PWD-} OLDPWD=${OLDPWD-}
[INFO] [stdout]         701 │+        # Note: We also redirect stdout because `cd` may output the target
[INFO] [stdout]         702 │+        # directory to stdout when CDPATH is set.
[INFO] [stdout]         703 │+        command cd -- "$_dir" &>/dev/null ||
[INFO] [stdout]         704 │+            {
[INFO] [stdout]         705 │+                _comp_compgen__error_fallback
[INFO] [stdout]         706 │+                return
[INFO] [stdout]         707 │+            }
[INFO] [stdout]         708 │+    fi
[INFO] [stdout]         709 │+
[INFO] [stdout]         710 │+    local _comp_compgen__append=$_append
[INFO] [stdout]         711 │+    local _comp_compgen__var=$_var
[INFO] [stdout]         712 │+    local _comp_compgen__cur=$_cur cur=$_cur
[INFO] [stdout]         713 │+    # Note: we use $1 as a part of a function name, and we use $2... as
[INFO] [stdout]         714 │+    # arguments to the function if any.
[INFO] [stdout]         715 │+    # shellcheck disable=SC2145
[INFO] [stdout]         716 │+    "${_generator[@]}" "$@"
[INFO] [stdout]         717 │+    local _status=$?
[INFO] [stdout]         718 │+
[INFO] [stdout]         719 │+    # Go back to the original directory.
[INFO] [stdout]         720 │+    # Note: Failure of this line results in the change of the current
[INFO] [stdout]         721 │+    # directory visible to the user.  We intentionally do not redirect
[INFO] [stdout]         722 │+    # stderr so that the error message appear in the terminal.
[INFO] [stdout]         723 │+    # shellcheck disable=SC2164
[INFO] [stdout]         724 │+    [[ $_dir ]] && command cd -- "$_original_pwd"
[INFO] [stdout]         725 │+
[INFO] [stdout]         726 │+    return "$_status"
[INFO] [stdout]         727 │+}
[INFO] [stdout]         728 │+
[INFO] [stdout]         729 │+# Helper function for _comp_compgen.  This function calls the builtin compgen.
[INFO] [stdout]         730 │+# @param $1... compgen_args
[INFO] [stdout]         731 │+# @var[in] _dir
[INFO] [stdout]         732 │+# @var[in] _ifs
[INFO] [stdout]         733 │+# @var[in] _cur
[INFO] [stdout]         734 │+# @arr[in] _upvars
[INFO] [stdout]         735 │+# @var[in] _append
[INFO] [stdout]         736 │+# @var[in] _var
[INFO] [stdout]         737 │+if ((BASH_VERSINFO[0] > 5 || BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3)); then
[INFO] [stdout]         738 │+    # bash >= 5.3 has `compgen -V array_name`
[INFO] [stdout]         739 │+    _comp_compgen__call_builtin()
[INFO] [stdout]         740 │+    {
[INFO] [stdout]         741 │+        if [[ $_dir ]]; then
[INFO] [stdout]         742 │+            local _original_pwd=$PWD
[INFO] [stdout]         743 │+            local PWD=${PWD-} OLDPWD=${OLDPWD-}
[INFO] [stdout]         744 │+            # Note: We also redirect stdout because `cd` may output the target
[INFO] [stdout]         745 │+            # directory to stdout when CDPATH is set.
[INFO] [stdout]         746 │+            command cd -- "$_dir" &>/dev/null || {
[INFO] [stdout]         747 │+                _comp_compgen__error_fallback
[INFO] [stdout]         748 │+                return
[INFO] [stdout]         749 │+            }
[INFO] [stdout]         750 │+        fi
[INFO] [stdout]         751 │+
[INFO] [stdout]         752 │+        local -a _result=()
[INFO] [stdout]         753 │+
[INFO] [stdout]         754 │+        # Note: We specify -X '' to exclude empty completions to make the
[INFO] [stdout]         755 │+        # behavior consistent with the implementation for Bash < 5.3 where
[INFO] [stdout]         756 │+        # `_comp_split -l` removes empty lines.  If the caller specifies -X
[INFO] [stdout]         757 │+        # pat, the effect of -X '' is overwritten by the specified one.
[INFO] [stdout]         758 │+        IFS=$_ifs compgen -V _result -X '' "$@" ${_cur:+-- "$_cur"} || {
[INFO] [stdout]         759 │+            _comp_compgen__error_fallback
[INFO] [stdout]         760 │+            return
[INFO] [stdout]         761 │+        }
[INFO] [stdout]         762 │+
[INFO] [stdout]         763 │+        # Go back to the original directory.
[INFO] [stdout]         764 │+        # Note: Failure of this line results in the change of the current
[INFO] [stdout]         765 │+        # directory visible to the user.  We intentionally do not redirect
[INFO] [stdout]         766 │+        # stderr so that the error message appear in the terminal.
[INFO] [stdout]         767 │+        # shellcheck disable=SC2164
[INFO] [stdout]         768 │+        [[ $_dir ]] && command cd -- "$_original_pwd"
[INFO] [stdout]         769 │+
[INFO] [stdout]         770 │+        ((${#_upvars[@]})) && _comp_unlocal "${_upvars[@]}"
[INFO] [stdout]         771 │+        ((${#_result[@]})) || return
[INFO] [stdout]         772 │+        if [[ $_append ]]; then
[INFO] [stdout]         773 │+            eval -- "$_var+=(\"\${_result[@]}\")"
[INFO] [stdout]         774 │+        else
[INFO] [stdout]         775 │+            eval -- "$_var=(\"\${_result[@]}\")"
[INFO] [stdout]         776 │+        fi
[INFO] [stdout]         777 │+        return
[INFO] [stdout]         778 │+    }
[INFO] [stdout]         779 │+else
[INFO] [stdout]         780 │+    _comp_compgen__call_builtin()
[INFO] [stdout]         781 │+    {
[INFO] [stdout]         782 │+        local _result
[INFO] [stdout]         783 │+        _result=$(
[INFO] [stdout]         784 │+            if [[ $_dir ]]; then
[INFO] [stdout]         785 │+                # Note: We also redirect stdout because `cd` may output the target
[INFO] [stdout]         786 │+                # directory to stdout when CDPATH is set.
[INFO] [stdout]         787 │+                command cd -- "$_dir" &>/dev/null || return
[INFO] [stdout]         788 │+            fi
[INFO] [stdout]         789 │+            IFS=$_ifs compgen "$@" ${_cur:+-- "$_cur"}
[INFO] [stdout]         790 │+        ) || {
[INFO] [stdout]         791 │+            _comp_compgen__error_fallback
[INFO] [stdout]         792 │+            return
[INFO] [stdout]         793 │+        }
[INFO] [stdout]         794 │+
[INFO] [stdout]         795 │+        ((${#_upvars[@]})) && _comp_unlocal "${_upvars[@]}"
[INFO] [stdout]         796 │+        _comp_split -l ${_append:+-a} "$_var" "$_result"
[INFO] [stdout]         797 │+    }
[INFO] [stdout]         798 │+fi
[INFO] [stdout]         799 │+
[INFO] [stdout]         800 │+# usage: _comp_compgen_set [words...]
[INFO] [stdout]         801 │+# Reset COMPREPLY with the specified WORDS.  If no arguments are specified, the
[INFO] [stdout]         802 │+# array is cleared.
[INFO] [stdout]         803 │+#
[INFO] [stdout]         804 │+# When an array name is specified by `-v VAR` in a caller _comp_compgen, the
[INFO] [stdout]         805 │+# array is reset instead of COMPREPLY.  When the `-a` flag is specified in a
[INFO] [stdout]         806 │+# caller _comp_compgen, the words are appended to the existing elements of the
[INFO] [stdout]         807 │+# array instead of replacing the existing elements.  This function ignores
[INFO] [stdout]         808 │+# ${cur-} or the prefix specified by `-v CUR`.
[INFO] [stdout]         809 │+# @return 0 if at least one completion is generated, or 1 otherwise.
[INFO] [stdout]         810 │+# @since 2.12
[INFO] [stdout]         811 │+_comp_compgen_set()
[INFO] [stdout]         812 │+{
[INFO] [stdout]         813 │+    local _append=${_comp_compgen__append-}
[INFO] [stdout]         814 │+    local _var=${_comp_compgen__var-COMPREPLY}
[INFO] [stdout]         815 │+    eval -- "$_var${_append:++}=(\"\$@\")"
[INFO] [stdout]         816 │+    (($#))
[INFO] [stdout]         817 │+}
[INFO] [stdout]         818 │+
[INFO] [stdout]         819 │+# Simply split the text and generate completions.  This function should be used
[INFO] [stdout]         820 │+# instead of `_comp_compgen -- -W "$(command)"`, which is vulnerable because
[INFO] [stdout]         821 │+# option -W evaluates the shell expansions included in the option argument.
[INFO] [stdout]         822 │+# Options:
[INFO] [stdout]         823 │+#   -F sep  Specify the separators. The default is $' \t\n'
[INFO] [stdout]         824 │+#   -l      The same as -F $'\n'
[INFO] [stdout]         825 │+#   -X arg  The same as the compgen option -X.
[INFO] [stdout]         826 │+#   -S arg  The same as the compgen option -S.
[INFO] [stdout]         827 │+#   -P arg  The same as the compgen option -P.
[INFO] [stdout]         828 │+#   -o arg  The same as the compgen option -o.
[INFO] [stdout]         829 │+# @param $1 String to split
[INFO] [stdout]         830 │+# @return 0 if at least one completion is generated, or 1 otherwise.
[INFO] [stdout]         831 │+# @since 2.12
[INFO] [stdout]         832 │+_comp_compgen_split()
[INFO] [stdout]         833 │+{
[INFO] [stdout]         834 │+    local _ifs=$' \t\n'
[INFO] [stdout]         835 │+    local -a _compgen_options=()
[INFO] [stdout]         836 │+
[INFO] [stdout]         837 │+    local OPTIND=1 OPTARG="" OPTERR=0 _opt
[INFO] [stdout]         838 │+    while getopts ':lF:X:S:P:o:' _opt "$@"; do
[INFO] [stdout]         839 │+        case $_opt in
[INFO] [stdout]         840 │+            l) _ifs=$'\n' ;;
[INFO] [stdout]         841 │+            F) _ifs=$OPTARG ;;
[INFO] [stdout]         842 │+            [XSPo]) _compgen_options+=("-$_opt" "$OPTARG") ;;
[INFO] [stdout]         843 │+            *)
[INFO] [stdout]         844 │+                printf 'bash_completion: usage: %s [-l|-F sep] [--] str\n' "$FUNCNAME" >&2
[INFO] [stdout]         845 │+                return 2
[INFO] [stdout]         846 │+                ;;
[INFO] [stdout]         847 │+        esac
[INFO] [stdout]         848 │+    done
[INFO] [stdout]         849 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]         850 │+    if (($# != 1)); then
[INFO] [stdout]         851 │+        printf 'bash_completion: %s: unexpected number of arguments.\n' "$FUNCNAME" >&2
[INFO] [stdout]         852 │+        printf 'usage: %s [-l|-F sep] [--] str' "$FUNCNAME" >&2
[INFO] [stdout]         853 │+        return 2
[INFO] [stdout]         854 │+    fi
[INFO] [stdout]         855 │+
[INFO] [stdout]         856 │+    local input=$1 IFS=$' \t\n'
[INFO] [stdout]         857 │+    _comp_compgen -F "$_ifs" -U input -- ${_compgen_options[@]+"${_compgen_options[@]}"} -W '$input'
[INFO] [stdout]         858 │+}
[INFO] [stdout]         859 │+
[INFO] [stdout]         860 │+# Check if the argument looks like a path.
[INFO] [stdout]         861 │+# @param $1 thing to check
[INFO] [stdout]         862 │+# @return True (0) if it does, False (> 0) otherwise
[INFO] [stdout]         863 │+# @since 2.12
[INFO] [stdout]         864 │+_comp_looks_like_path()
[INFO] [stdout]         865 │+{
[INFO] [stdout]         866 │+    [[ ${1-} == @(*/|[.~])* ]]
[INFO] [stdout]         867 │+}
[INFO] [stdout]         868 │+
[INFO] [stdout]         869 │+# Reassemble command line words, excluding specified characters from the
[INFO] [stdout]         870 │+# list of word completion separators (COMP_WORDBREAKS).
[INFO] [stdout]         871 │+# @param $1 chars  Characters out of $COMP_WORDBREAKS which should
[INFO] [stdout]         872 │+#     NOT be considered word breaks. This is useful for things like scp where
[INFO] [stdout]         873 │+#     we want to return host:path and not only path, so we would pass the
[INFO] [stdout]         874 │+#     colon (:) as $1 here.
[INFO] [stdout]         875 │+# @param $2 words  Name of variable to return words to
[INFO] [stdout]         876 │+# @param $3 cword  Name of variable to return cword to
[INFO] [stdout]         877 │+#
[INFO] [stdout]         878 │+_comp__reassemble_words()
[INFO] [stdout]         879 │+{
[INFO] [stdout]         880 │+    local exclude="" i j line ref
[INFO] [stdout]         881 │+    # Exclude word separator characters?
[INFO] [stdout]         882 │+    if [[ $1 ]]; then
[INFO] [stdout]         883 │+        # Yes, exclude word separator characters;
[INFO] [stdout]         884 │+        # Exclude only those characters, which were really included
[INFO] [stdout]         885 │+        exclude="[${1//[^$COMP_WORDBREAKS]/}]"
[INFO] [stdout]         886 │+    fi
[INFO] [stdout]         887 │+
[INFO] [stdout]         888 │+    # Default to cword unchanged
[INFO] [stdout]         889 │+    printf -v "$3" %s "$COMP_CWORD"
[INFO] [stdout]         890 │+    # Are characters excluded which were former included?
[INFO] [stdout]         891 │+    if [[ $exclude ]]; then
[INFO] [stdout]         892 │+        # Yes, list of word completion separators has shrunk;
[INFO] [stdout]         893 │+        line=$COMP_LINE
[INFO] [stdout]         894 │+        # Re-assemble words to complete
[INFO] [stdout]         895 │+        for ((i = 0, j = 0; i < ${#COMP_WORDS[@]}; i++, j++)); do
[INFO] [stdout]         896 │+            # Is current word not word 0 (the command itself) and is word not
[INFO] [stdout]         897 │+            # empty and is word made up of just word separator characters to
[INFO] [stdout]         898 │+            # be excluded and is current word not preceded by whitespace in
[INFO] [stdout]         899 │+            # original line?
[INFO] [stdout]         900 │+            while [[ $i -gt 0 && ${COMP_WORDS[i]} == +($exclude) ]]; do
[INFO] [stdout]         901 │+                # Is word separator not preceded by whitespace in original line
[INFO] [stdout]         902 │+                # and are we not going to append to word 0 (the command
[INFO] [stdout]         903 │+                # itself), then append to current word.
[INFO] [stdout]         904 │+                [[ $line != [[:blank:]]* ]] && ((j >= 2)) && ((j--))
[INFO] [stdout]         905 │+                # Append word separator to current or new word
[INFO] [stdout]         906 │+                ref="$2[$j]"
[INFO] [stdout]         907 │+                printf -v "$ref" %s "${!ref-}${COMP_WORDS[i]}"
[INFO] [stdout]         908 │+                # Indicate new cword
[INFO] [stdout]         909 │+                ((i == COMP_CWORD)) && printf -v "$3" %s "$j"
[INFO] [stdout]         910 │+                # Remove optional whitespace + word separator from line copy
[INFO] [stdout]         911 │+                line=${line#*"${COMP_WORDS[i]}"}
[INFO] [stdout]         912 │+                # Indicate next word if available, else end *both* while and
[INFO] [stdout]         913 │+                # for loop
[INFO] [stdout]         914 │+                if ((i < ${#COMP_WORDS[@]} - 1)); then
[INFO] [stdout]         915 │+                    ((i++))
[INFO] [stdout]         916 │+                else
[INFO] [stdout]         917 │+                    break 2
[INFO] [stdout]         918 │+                fi
[INFO] [stdout]         919 │+                # Start new word if word separator in original line is
[INFO] [stdout]         920 │+                # followed by whitespace.
[INFO] [stdout]         921 │+                [[ $line == [[:blank:]]* ]] && ((j++))
[INFO] [stdout]         922 │+            done
[INFO] [stdout]         923 │+            # Append word to current word
[INFO] [stdout]         924 │+            ref="$2[$j]"
[INFO] [stdout]         925 │+            printf -v "$ref" %s "${!ref-}${COMP_WORDS[i]}"
[INFO] [stdout]         926 │+            # Remove optional whitespace + word from line copy
[INFO] [stdout]         927 │+            line=${line#*"${COMP_WORDS[i]}"}
[INFO] [stdout]         928 │+            # Indicate new cword
[INFO] [stdout]         929 │+            ((i == COMP_CWORD)) && printf -v "$3" %s "$j"
[INFO] [stdout]         930 │+        done
[INFO] [stdout]         931 │+        ((i == COMP_CWORD)) && printf -v "$3" %s "$j"
[INFO] [stdout]         932 │+    else
[INFO] [stdout]         933 │+        # No, list of word completions separators hasn't changed;
[INFO] [stdout]         934 │+        for i in "${!COMP_WORDS[@]}"; do
[INFO] [stdout]         935 │+            printf -v "$2[i]" %s "${COMP_WORDS[i]}"
[INFO] [stdout]         936 │+        done
[INFO] [stdout]         937 │+    fi
[INFO] [stdout]         938 │+}
[INFO] [stdout]         939 │+
[INFO] [stdout]         940 │+# @param $1 exclude  Characters out of $COMP_WORDBREAKS which should NOT be
[INFO] [stdout]         941 │+#     considered word breaks. This is useful for things like scp where
[INFO] [stdout]         942 │+#     we want to return host:path and not only path, so we would pass the
[INFO] [stdout]         943 │+#     colon (:) as $1 in this case.
[INFO] [stdout]         944 │+# @param $2 words  Name of variable to return words to
[INFO] [stdout]         945 │+# @param $3 cword  Name of variable to return cword to
[INFO] [stdout]         946 │+# @param $4 cur  Name of variable to return current word to complete to
[INFO] [stdout]         947 │+# @see _comp__reassemble_words()
[INFO] [stdout]         948 │+_comp__get_cword_at_cursor()
[INFO] [stdout]         949 │+{
[INFO] [stdout]         950 │+    local cword words=()
[INFO] [stdout]         951 │+    _comp__reassemble_words "$1" words cword
[INFO] [stdout]         952 │+
[INFO] [stdout]         953 │+    local i cur="" index=$COMP_POINT lead=${COMP_LINE:0:COMP_POINT}
[INFO] [stdout]         954 │+    # Cursor not at position 0 and not led by just space(s)?
[INFO] [stdout]         955 │+    if [[ $index -gt 0 && ($lead && ${lead//[[:space:]]/}) ]]; then
[INFO] [stdout]         956 │+        cur=$COMP_LINE
[INFO] [stdout]         957 │+        for ((i = 0; i <= cword; ++i)); do
[INFO] [stdout]         958 │+            # Current word fits in $cur, and $cur doesn't match cword?
[INFO] [stdout]         959 │+            while [[ ${#cur} -ge ${#words[i]} &&
[INFO] [stdout]         960 │+                ${cur:0:${#words[i]}} != "${words[i]-}" ]]; do
[INFO] [stdout]         961 │+                # Strip first character
[INFO] [stdout]         962 │+                cur=${cur:1}
[INFO] [stdout]         963 │+                # Decrease cursor position, staying >= 0
[INFO] [stdout]         964 │+                ((index > 0)) && ((index--))
[INFO] [stdout]         965 │+            done
[INFO] [stdout]         966 │+
[INFO] [stdout]         967 │+            # Does found word match cword?
[INFO] [stdout]         968 │+            if ((i < cword)); then
[INFO] [stdout]         969 │+                # No, cword lies further;
[INFO] [stdout]         970 │+                local old_size=${#cur}
[INFO] [stdout]         971 │+                cur=${cur#"${words[i]}"}
[INFO] [stdout]         972 │+                local new_size=${#cur}
[INFO] [stdout]         973 │+                ((index -= old_size - new_size))
[INFO] [stdout]         974 │+            fi
[INFO] [stdout]         975 │+        done
[INFO] [stdout]         976 │+        # Clear $cur if just space(s)
[INFO] [stdout]         977 │+        [[ $cur && ! ${cur//[[:space:]]/} ]] && cur=
[INFO] [stdout]         978 │+        # Zero $index if negative
[INFO] [stdout]         979 │+        ((index < 0)) && index=0
[INFO] [stdout]         980 │+    fi
[INFO] [stdout]         981 │+
[INFO] [stdout]         982 │+    local IFS=$' \t\n'
[INFO] [stdout]         983 │+    local "$2" "$3" "$4" && _comp_upvars -a"${#words[@]}" "$2" ${words[@]+"${words[@]}"} \
[INFO] [stdout]         984 │+        -v "$3" "$cword" -v "$4" "${cur:0:index}"
[INFO] [stdout]         985 │+}
[INFO] [stdout]         986 │+
[INFO] [stdout]         987 │+# Get the word to complete and optional previous words.
[INFO] [stdout]         988 │+# This is nicer than ${COMP_WORDS[COMP_CWORD]}, since it handles cases
[INFO] [stdout]         989 │+# where the user is completing in the middle of a word.
[INFO] [stdout]         990 │+# (For example, if the line is "ls foobar",
[INFO] [stdout]         991 │+# and the cursor is here -------->   ^
[INFO] [stdout]         992 │+# Also one is able to cross over possible wordbreak characters.
[INFO] [stdout]         993 │+# Usage: _comp_get_words [OPTIONS] [VARNAMES]
[INFO] [stdout]         994 │+# Available VARNAMES:
[INFO] [stdout]         995 │+#     cur         Return cur via $cur
[INFO] [stdout]         996 │+#     prev        Return prev via $prev
[INFO] [stdout]         997 │+#     words       Return words via $words
[INFO] [stdout]         998 │+#     cword       Return cword via $cword
[INFO] [stdout]         999 │+#
[INFO] [stdout]        1000 │+# Available OPTIONS:
[INFO] [stdout]        1001 │+#     -n EXCLUDE  Characters out of $COMP_WORDBREAKS which should NOT be
[INFO] [stdout]        1002 │+#                 considered word breaks. This is useful for things like scp
[INFO] [stdout]        1003 │+#                 where we want to return host:path and not only path, so we
[INFO] [stdout]        1004 │+#                 would pass the colon (:) as -n option in this case.
[INFO] [stdout]        1005 │+#     -c VARNAME  Return cur via $VARNAME
[INFO] [stdout]        1006 │+#     -p VARNAME  Return prev via $VARNAME
[INFO] [stdout]        1007 │+#     -w VARNAME  Return words via $VARNAME
[INFO] [stdout]        1008 │+#     -i VARNAME  Return cword via $VARNAME
[INFO] [stdout]        1009 │+#
[INFO] [stdout]        1010 │+# Example usage:
[INFO] [stdout]        1011 │+#
[INFO] [stdout]        1012 │+#    $ _comp_get_words -n : cur prev
[INFO] [stdout]        1013 │+#
[INFO] [stdout]        1014 │+# @since 2.12
[INFO] [stdout]        1015 │+_comp_get_words()
[INFO] [stdout]        1016 │+{
[INFO] [stdout]        1017 │+    local exclude="" flag i OPTIND=1
[INFO] [stdout]        1018 │+    local cur cword words=()
[INFO] [stdout]        1019 │+    local upargs=() upvars=() vcur="" vcword="" vprev="" vwords=""
[INFO] [stdout]        1020 │+
[INFO] [stdout]        1021 │+    while getopts "c:i:n:p:w:" flag "$@"; do
[INFO] [stdout]        1022 │+        case $flag in
[INFO] [stdout]        1023 │+            [cipw])
[INFO] [stdout]        1024 │+                if [[ $OPTARG != [a-zA-Z_]*([a-zA-Z_0-9])?(\[*\]) ]]; then
[INFO] [stdout]        1025 │+                    echo "bash_completion: $FUNCNAME: -$flag: invalid variable name \`$OPTARG'" >&2
[INFO] [stdout]        1026 │+                    return 1
[INFO] [stdout]        1027 │+                fi
[INFO] [stdout]        1028 │+                ;;&
[INFO] [stdout]        1029 │+            c) vcur=$OPTARG ;;
[INFO] [stdout]        1030 │+            i) vcword=$OPTARG ;;
[INFO] [stdout]        1031 │+            n) exclude=$OPTARG ;;
[INFO] [stdout]        1032 │+            p) vprev=$OPTARG ;;
[INFO] [stdout]        1033 │+            w) vwords=$OPTARG ;;
[INFO] [stdout]        1034 │+            *)
[INFO] [stdout]        1035 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]        1036 │+                return 1
[INFO] [stdout]        1037 │+                ;;
[INFO] [stdout]        1038 │+        esac
[INFO] [stdout]        1039 │+    done
[INFO] [stdout]        1040 │+    while [[ $# -ge $OPTIND ]]; do
[INFO] [stdout]        1041 │+        case ${!OPTIND} in
[INFO] [stdout]        1042 │+            cur) vcur=cur ;;
[INFO] [stdout]        1043 │+            prev) vprev=prev ;;
[INFO] [stdout]        1044 │+            cword) vcword=cword ;;
[INFO] [stdout]        1045 │+            words) vwords=words ;;
[INFO] [stdout]        1046 │+            *)
[INFO] [stdout]        1047 │+                echo "bash_completion: $FUNCNAME: \`${!OPTIND}':" \
[INFO] [stdout]        1048 │+                    "unknown argument" >&2
[INFO] [stdout]        1049 │+                return 1
[INFO] [stdout]        1050 │+                ;;
[INFO] [stdout]        1051 │+        esac
[INFO] [stdout]        1052 │+        ((OPTIND += 1))
[INFO] [stdout]        1053 │+    done
[INFO] [stdout]        1054 │+
[INFO] [stdout]        1055 │+    _comp__get_cword_at_cursor "${exclude-}" words cword cur
[INFO] [stdout]        1056 │+
[INFO] [stdout]        1057 │+    [[ $vcur ]] && {
[INFO] [stdout]        1058 │+        upvars+=("$vcur")
[INFO] [stdout]        1059 │+        upargs+=(-v "$vcur" "$cur")
[INFO] [stdout]        1060 │+    }
[INFO] [stdout]        1061 │+    [[ $vcword ]] && {
[INFO] [stdout]        1062 │+        upvars+=("$vcword")
[INFO] [stdout]        1063 │+        upargs+=(-v "$vcword" "$cword")
[INFO] [stdout]        1064 │+    }
[INFO] [stdout]        1065 │+    [[ $vprev ]] && {
[INFO] [stdout]        1066 │+        local value=""
[INFO] [stdout]        1067 │+        ((cword >= 1)) && value=${words[cword - 1]}
[INFO] [stdout]        1068 │+        upvars+=("$vprev")
[INFO] [stdout]        1069 │+        upargs+=(-v "$vprev" "$value")
[INFO] [stdout]        1070 │+    }
[INFO] [stdout]        1071 │+    [[ $vwords ]] && {
[INFO] [stdout]        1072 │+        # Note: bash < 4.4 has a bug that all the elements are connected with
[INFO] [stdout]        1073 │+        # ${v+"$@"} when IFS does not contain whitespace.
[INFO] [stdout]        1074 │+        local IFS=$' \t\n'
[INFO] [stdout]        1075 │+        upvars+=("$vwords")
[INFO] [stdout]        1076 │+        upargs+=(-a"${#words[@]}" "$vwords" ${words+"${words[@]}"})
[INFO] [stdout]        1077 │+    }
[INFO] [stdout]        1078 │+
[INFO] [stdout]        1079 │+    ((${#upvars[@]})) && local "${upvars[@]}" && _comp_upvars "${upargs[@]}"
[INFO] [stdout]        1080 │+}
[INFO] [stdout]        1081 │+
[INFO] [stdout]        1082 │+# Generate the specified items after left-trimming with the word-to-complete
[INFO] [stdout]        1083 │+# containing a colon (:).  If the word-to-complete does not contain a colon,
[INFO] [stdout]        1084 │+# this generates the specified items without modifications.
[INFO] [stdout]        1085 │+# @param $@     items to generate
[INFO] [stdout]        1086 │+# @var[in] cur  current word to complete
[INFO] [stdout]        1087 │+#
[INFO] [stdout]        1088 │+# @remarks In Bash, with a colon in COMP_WORDBREAKS, words containing colons
[INFO] [stdout]        1089 │+# are always completed as entire words if the word to complete contains a
[INFO] [stdout]        1090 │+# colon.  This function fixes this behavior by removing the
[INFO] [stdout]        1091 │+# colon-containing-prefix from the items.
[INFO] [stdout]        1092 │+#
[INFO] [stdout]        1093 │+# The preferred solution is to remove the colon (:) from COMP_WORDBREAKS in
[INFO] [stdout]        1094 │+# your .bashrc:
[INFO] [stdout]        1095 │+#
[INFO] [stdout]        1096 │+#    # Remove colon (:) from list of word completion separators
[INFO] [stdout]        1097 │+#    COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
[INFO] [stdout]        1098 │+#
[INFO] [stdout]        1099 │+# See also: Bash FAQ - E13) Why does filename completion misbehave if a colon
[INFO] [stdout]        1100 │+# appears in the filename? - https://tiswww.case.edu/php/chet/bash/FAQ
[INFO] [stdout]        1101 │+#
[INFO] [stdout]        1102 │+# @since 2.12
[INFO] [stdout]        1103 │+_comp_compgen_ltrim_colon()
[INFO] [stdout]        1104 │+{
[INFO] [stdout]        1105 │+    (($#)) || return 0
[INFO] [stdout]        1106 │+    local -a _tmp
[INFO] [stdout]        1107 │+    _tmp=("$@")
[INFO] [stdout]        1108 │+    if [[ $cur == *:* && $COMP_WORDBREAKS == *:* ]]; then
[INFO] [stdout]        1109 │+        # Remove colon-word prefix from items
[INFO] [stdout]        1110 │+        local _colon_word=${cur%"${cur##*:}"}
[INFO] [stdout]        1111 │+        _tmp=("${_tmp[@]#"$_colon_word"}")
[INFO] [stdout]        1112 │+    fi
[INFO] [stdout]        1113 │+    _comp_compgen_set "${_tmp[@]}"
[INFO] [stdout]        1114 │+}
[INFO] [stdout]        1115 │+
[INFO] [stdout]        1116 │+# If the word-to-complete contains a colon (:), left-trim COMPREPLY items with
[INFO] [stdout]        1117 │+# word-to-complete.
[INFO] [stdout]        1118 │+#
[INFO] [stdout]        1119 │+# @param $1 current word to complete (cur)
[INFO] [stdout]        1120 │+# @var[in,out] COMPREPLY
[INFO] [stdout]        1121 │+#
[INFO] [stdout]        1122 │+# @since 2.12
[INFO] [stdout]        1123 │+_comp_ltrim_colon_completions()
[INFO] [stdout]        1124 │+{
[INFO] [stdout]        1125 │+    ((${#COMPREPLY[@]})) || return 0
[INFO] [stdout]        1126 │+    _comp_compgen -c "$1" ltrim_colon "${COMPREPLY[@]}"
[INFO] [stdout]        1127 │+}
[INFO] [stdout]        1128 │+
[INFO] [stdout]        1129 │+# This function quotes the argument in a way so that readline dequoting
[INFO] [stdout]        1130 │+# results in the original argument.  This is necessary for at least
[INFO] [stdout]        1131 │+# `compgen` which requires its arguments quoted/escaped:
[INFO] [stdout]        1132 │+#
[INFO] [stdout]        1133 │+#     $ ls "a'b/"
[INFO] [stdout]        1134 │+#     c
[INFO] [stdout]        1135 │+#     $ compgen -f "a'b/"       # Wrong, doesn't return output
[INFO] [stdout]        1136 │+#     $ compgen -f "a\'b/"      # Good
[INFO] [stdout]        1137 │+#     a\'b/c
[INFO] [stdout]        1138 │+#
[INFO] [stdout]        1139 │+# See also:
[INFO] [stdout]        1140 │+# - https://lists.gnu.org/archive/html/bug-bash/2009-03/msg00155.html
[INFO] [stdout]        1141 │+# - https://www.mail-archive.com/bash-completion-devel@lists.alioth.debian.org/msg01944.html
[INFO] [stdout]        1142 │+# @param $1      Argument to quote
[INFO] [stdout]        1143 │+# @var[out] REPLY  Quoted result is stored in this variable
[INFO] [stdout]        1144 │+# @since 2.12
[INFO] [stdout]        1145 │+# shellcheck disable=SC2178 # The assignment is not intended for the global "REPLY"
[INFO] [stdout]        1146 │+_comp_quote_compgen()
[INFO] [stdout]        1147 │+{
[INFO] [stdout]        1148 │+    if [[ $1 == \'* ]]; then
[INFO] [stdout]        1149 │+        # Leave out first character
[INFO] [stdout]        1150 │+        REPLY=${1:1}
[INFO] [stdout]        1151 │+    else
[INFO] [stdout]        1152 │+        printf -v REPLY %q "$1"
[INFO] [stdout]        1153 │+
[INFO] [stdout]        1154 │+        # If result becomes quoted like this: $'string', re-evaluate in order
[INFO] [stdout]        1155 │+        # to drop the additional quoting.  See also:
[INFO] [stdout]        1156 │+        # https://www.mail-archive.com/bash-completion-devel@lists.alioth.debian.org/msg01942.html
[INFO] [stdout]        1157 │+        if [[ $REPLY == \$\'*\' ]]; then
[INFO] [stdout]        1158 │+            local value=${REPLY:2:-1} # Strip beginning $' and ending '.
[INFO] [stdout]        1159 │+            value=${value//'%'/%%}    # Escape % for printf format.
[INFO] [stdout]        1160 │+            # shellcheck disable=SC2059
[INFO] [stdout]        1161 │+            printf -v REPLY "$value" # Decode escape sequences of \....
[INFO] [stdout]        1162 │+        fi
[INFO] [stdout]        1163 │+    fi
[INFO] [stdout]        1164 │+}
[INFO] [stdout]        1165 │+
[INFO] [stdout]        1166 │+# This function performs file and directory completion. It's better than
[INFO] [stdout]        1167 │+# simply using 'compgen -f', because it honours spaces in filenames.
[INFO] [stdout]        1168 │+# @param $1  If `-d', complete only on directories.  Otherwise filter/pick only
[INFO] [stdout]        1169 │+#            completions with `.$1' and the uppercase version of it as file
[INFO] [stdout]        1170 │+#            extension.
[INFO] [stdout]        1171 │+# @return 0 if at least one completion is generated, or 1 otherwise.
[INFO] [stdout]        1172 │+#
[INFO] [stdout]        1173 │+# @since 2.12
[INFO] [stdout]        1174 │+_comp_compgen_filedir()
[INFO] [stdout]        1175 │+{
[INFO] [stdout]        1176 │+    _comp_compgen_tilde && return
[INFO] [stdout]        1177 │+
[INFO] [stdout]        1178 │+    local -a toks
[INFO] [stdout]        1179 │+    local _arg=${1-}
[INFO] [stdout]        1180 │+
[INFO] [stdout]        1181 │+    if [[ $_arg == -d ]]; then
[INFO] [stdout]        1182 │+        _comp_compgen -v toks -- -d
[INFO] [stdout]        1183 │+    else
[INFO] [stdout]        1184 │+        local REPLY
[INFO] [stdout]        1185 │+        _comp_quote_compgen "${cur-}"
[INFO] [stdout]        1186 │+        local _quoted=$REPLY
[INFO] [stdout]        1187 │+        _comp_unlocal REPLY
[INFO] [stdout]        1188 │+
[INFO] [stdout]        1189 │+        # work around bash-4.2 where compgen -f "''" produces nothing.
[INFO] [stdout]        1190 │+        [[ $_quoted == "''" ]] && _quoted=""
[INFO] [stdout]        1191 │+
[INFO] [stdout]        1192 │+        # Munge xspec to contain uppercase version too
[INFO] [stdout]        1193 │+        # https://lists.gnu.org/archive/html/bug-bash/2010-09/msg00036.html
[INFO] [stdout]        1194 │+        # news://news.gmane.io/4C940E1C.1010304@case.edu
[INFO] [stdout]        1195 │+        local _xspec=${_arg:+"!*.@($_arg|${_arg^^})"} _plusdirs=()
[INFO] [stdout]        1196 │+
[INFO] [stdout]        1197 │+        # Use plusdirs to get dir completions if we have a xspec; if we don't,
[INFO] [stdout]        1198 │+        # there's no need, dirs come along with other completions. Don't use
[INFO] [stdout]        1199 │+        # plusdirs quite yet if fallback is in use though, in order to not ruin
[INFO] [stdout]        1200 │+        # the fallback condition with the "plus" dirs.
[INFO] [stdout]        1201 │+        local _opts=(-f -X "$_xspec")
[INFO] [stdout]        1202 │+        [[ $_xspec ]] && _plusdirs=(-o plusdirs)
[INFO] [stdout]        1203 │+        [[ ${BASH_COMPLETION_FILEDIR_FALLBACK-} || ! ${_plusdirs-} ]] ||
[INFO] [stdout]        1204 │+            _opts+=("${_plusdirs[@]}")
[INFO] [stdout]        1205 │+
[INFO] [stdout]        1206 │+        _comp_compgen -v toks -c "$_quoted" -- "${_opts[@]}"
[INFO] [stdout]        1207 │+
[INFO] [stdout]        1208 │+        # Try without filter if it failed to produce anything and configured to
[INFO] [stdout]        1209 │+        [[ ${BASH_COMPLETION_FILEDIR_FALLBACK-} &&
[INFO] [stdout]        1210 │+            $_arg && ${#toks[@]} -lt 1 ]] &&
[INFO] [stdout]        1211 │+            _comp_compgen -av toks -c "$_quoted" -- \
[INFO] [stdout]        1212 │+                -f ${_plusdirs+"${_plusdirs[@]}"}
[INFO] [stdout]        1213 │+    fi
[INFO] [stdout]        1214 │+
[INFO] [stdout]        1215 │+    if ((${#toks[@]} != 0)); then
[INFO] [stdout]        1216 │+        # Remove . and .. (as well as */. and */..) from suggestions, unless
[INFO] [stdout]        1217 │+        # .. or */.. was typed explicitly by the user (for users who use
[INFO] [stdout]        1218 │+        # tab-completion to append a slash after '..')
[INFO] [stdout]        1219 │+        if [[ $cur != ?(*/).. ]]; then
[INFO] [stdout]        1220 │+            _comp_compgen -Rv toks -- -X '?(*/)@(.|..)' -W '"${toks[@]}"'
[INFO] [stdout]        1221 │+        fi
[INFO] [stdout]        1222 │+    fi
[INFO] [stdout]        1223 │+
[INFO] [stdout]        1224 │+    if ((${#toks[@]} != 0)); then
[INFO] [stdout]        1225 │+        # 2>/dev/null for direct invocation, e.g. in the _comp_compgen_filedir
[INFO] [stdout]        1226 │+        # unit test
[INFO] [stdout]        1227 │+        compopt -o filenames 2>/dev/null
[INFO] [stdout]        1228 │+    fi
[INFO] [stdout]        1229 │+
[INFO] [stdout]        1230 │+    # Note: bash < 4.4 has a bug that all the elements are connected with
[INFO] [stdout]        1231 │+    # ${v+"${a[@]}"} when IFS does not contain whitespace.
[INFO] [stdout]        1232 │+    local IFS=$' \t\n'
[INFO] [stdout]        1233 │+    _comp_compgen -U toks set ${toks[@]+"${toks[@]}"}
[INFO] [stdout]        1234 │+}
[INFO] [stdout]        1235 │+
[INFO] [stdout]        1236 │+# This function splits $cur=--foo=bar into $prev=--foo, $cur=bar, making it
[INFO] [stdout]        1237 │+# easier to support both "--foo bar" and "--foo=bar" style completions.
[INFO] [stdout]        1238 │+# `=' should have been removed from COMP_WORDBREAKS when setting $cur for
[INFO] [stdout]        1239 │+# this to be useful.
[INFO] [stdout]        1240 │+# Returns 0 if current option was split, 1 otherwise.
[INFO] [stdout]        1241 │+#
[INFO] [stdout]        1242 │+_comp__split_longopt()
[INFO] [stdout]        1243 │+{
[INFO] [stdout]        1244 │+    if [[ $cur == --?*=* ]]; then
[INFO] [stdout]        1245 │+        # Cut also backslash before '=' in case it ended up there
[INFO] [stdout]        1246 │+        # for some reason.
[INFO] [stdout]        1247 │+        prev=${cur%%?(\\)=*}
[INFO] [stdout]        1248 │+        cur=${cur#*=}
[INFO] [stdout]        1249 │+        return 0
[INFO] [stdout]        1250 │+    fi
[INFO] [stdout]        1251 │+
[INFO] [stdout]        1252 │+    return 1
[INFO] [stdout]        1253 │+}
[INFO] [stdout]        1254 │+
[INFO] [stdout]        1255 │+# Complete variables.
[INFO] [stdout]        1256 │+# @return  True (0) if variables were completed,
[INFO] [stdout]        1257 │+#          False (> 0) if not.
[INFO] [stdout]        1258 │+# @since 2.12
[INFO] [stdout]        1259 │+_comp_compgen_variables()
[INFO] [stdout]        1260 │+{
[INFO] [stdout]        1261 │+    if [[ $cur =~ ^(\$(\{[!#]?)?)([A-Za-z0-9_]*)$ ]]; then
[INFO] [stdout]        1262 │+        # Completing $var / ${var / ${!var / ${#var
[INFO] [stdout]        1263 │+        if [[ $cur == '${'* ]]; then
[INFO] [stdout]        1264 │+            local arrs vars
[INFO] [stdout]        1265 │+            _comp_compgen -v vars -c "${BASH_REMATCH[3]}" -- -A variable -P "${BASH_REMATCH[1]}" -S '}'
[INFO] [stdout]        1266 │+            _comp_compgen -v arrs -c "${BASH_REMATCH[3]}" -- -A arrayvar -P "${BASH_REMATCH[1]}" -S '['
[INFO] [stdout]        1267 │+            if ((${#vars[@]} == 1 && ${#arrs[@]} != 0)); then
[INFO] [stdout]        1268 │+                # Complete ${arr with ${array[ if there is only one match, and that match is an array variable
[INFO] [stdout]        1269 │+                compopt -o nospace
[INFO] [stdout]        1270 │+                _comp_compgen -U vars -U arrs -R -- -W '"${arrs[@]}"'
[INFO] [stdout]        1271 │+            else
[INFO] [stdout]        1272 │+                # Complete ${var with ${variable}
[INFO] [stdout]        1273 │+                _comp_compgen -U vars -U arrs -R -- -W '"${vars[@]}"'
[INFO] [stdout]        1274 │+            fi
[INFO] [stdout]        1275 │+        else
[INFO] [stdout]        1276 │+            # Complete $var with $variable
[INFO] [stdout]        1277 │+            _comp_compgen -ac "${BASH_REMATCH[3]}" -- -A variable -P '$'
[INFO] [stdout]        1278 │+        fi
[INFO] [stdout]        1279 │+        return 0
[INFO] [stdout]        1280 │+    elif [[ $cur =~ ^(\$\{[#!]?)([A-Za-z0-9_]*)\[([^]]*)$ ]]; then
[INFO] [stdout]        1281 │+        # Complete ${array[i with ${array[idx]}
[INFO] [stdout]        1282 │+        local vars
[INFO] [stdout]        1283 │+        _comp_compgen -v vars -c "${BASH_REMATCH[3]}" -- -W '"${!'"${BASH_REMATCH[2]}"'[@]}"' \
[INFO] [stdout]        1284 │+            -P "${BASH_REMATCH[1]}${BASH_REMATCH[2]}[" -S ']}'
[INFO] [stdout]        1285 │+        # Complete ${arr[@ and ${arr[*
[INFO] [stdout]        1286 │+        if [[ ${BASH_REMATCH[3]} == [@*] ]]; then
[INFO] [stdout]        1287 │+            vars+=("${BASH_REMATCH[1]}${BASH_REMATCH[2]}[${BASH_REMATCH[3]}]}")
[INFO] [stdout]        1288 │+        fi
[INFO] [stdout]        1289 │+        # array indexes may have colons
[INFO] [stdout]        1290 │+        if ((${#vars[@]})); then
[INFO] [stdout]        1291 │+            _comp_compgen -U vars -c "$cur" ltrim_colon "${vars[@]}"
[INFO] [stdout]        1292 │+        else
[INFO] [stdout]        1293 │+            _comp_compgen_set
[INFO] [stdout]        1294 │+        fi
[INFO] [stdout]        1295 │+        return 0
[INFO] [stdout]        1296 │+    elif [[ $cur =~ ^\$\{[#!]?[A-Za-z0-9_]*\[.*\]$ ]]; then
[INFO] [stdout]        1297 │+        # Complete ${array[idx] with ${array[idx]}
[INFO] [stdout]        1298 │+        _comp_compgen -c "$cur" ltrim_colon "$cur}"
[INFO] [stdout]        1299 │+        return 0
[INFO] [stdout]        1300 │+    fi
[INFO] [stdout]        1301 │+    return 1
[INFO] [stdout]        1302 │+}
[INFO] [stdout]        1303 │+
[INFO] [stdout]        1304 │+# Complete a delimited value.
[INFO] [stdout]        1305 │+#
[INFO] [stdout]        1306 │+# Usage: [-k] DELIMITER COMPGEN_ARG...
[INFO] [stdout]        1307 │+#         -k: do not filter out already present tokens in value
[INFO] [stdout]        1308 │+# @since 2.12
[INFO] [stdout]        1309 │+_comp_delimited()
[INFO] [stdout]        1310 │+{
[INFO] [stdout]        1311 │+    local prefix="" delimiter=$1 deduplicate=set
[INFO] [stdout]        1312 │+    shift
[INFO] [stdout]        1313 │+    if [[ $delimiter == -k ]]; then
[INFO] [stdout]        1314 │+        deduplicate=""
[INFO] [stdout]        1315 │+        delimiter=$1
[INFO] [stdout]        1316 │+        shift
[INFO] [stdout]        1317 │+    fi
[INFO] [stdout]        1318 │+    [[ $cur == *"$delimiter"* ]] && prefix=${cur%"$delimiter"*}$delimiter
[INFO] [stdout]        1319 │+
[INFO] [stdout]        1320 │+    if [[ $deduplicate ]]; then
[INFO] [stdout]        1321 │+        # We could construct a -X pattern to feed to compgen, but that'd
[INFO] [stdout]        1322 │+        # conflict with possibly already set -X in $@, as well as have
[INFO] [stdout]        1323 │+        # glob char escaping issues to deal with. Do removals by hand instead.
[INFO] [stdout]        1324 │+        _comp_compgen -R -- "$@"
[INFO] [stdout]        1325 │+        local -a existing
[INFO] [stdout]        1326 │+        _comp_split -F "$delimiter" existing "$cur"
[INFO] [stdout]        1327 │+        # Do not remove the last from existing if it's not followed by the
[INFO] [stdout]        1328 │+        # delimiter so we get space appended.
[INFO] [stdout]        1329 │+        [[ ! $cur || $cur == *"$delimiter" ]] || unset -v "existing[${#existing[@]}-1]"
[INFO] [stdout]        1330 │+        if ((${#COMPREPLY[@]})); then
[INFO] [stdout]        1331 │+            local x i
[INFO] [stdout]        1332 │+            for x in ${existing+"${existing[@]}"}; do
[INFO] [stdout]        1333 │+                for i in "${!COMPREPLY[@]}"; do
[INFO] [stdout]        1334 │+                    if [[ $x == "${COMPREPLY[i]}" ]]; then
[INFO] [stdout]        1335 │+                        unset -v 'COMPREPLY[i]'
[INFO] [stdout]        1336 │+                        continue 2 # assume no dupes in COMPREPLY
[INFO] [stdout]        1337 │+                    fi
[INFO] [stdout]        1338 │+                done
[INFO] [stdout]        1339 │+            done
[INFO] [stdout]        1340 │+            ((${#COMPREPLY[@]})) &&
[INFO] [stdout]        1341 │+                _comp_compgen -c "${cur##*"$delimiter"}" -- -W '"${COMPREPLY[@]}"'
[INFO] [stdout]        1342 │+        fi
[INFO] [stdout]        1343 │+    else
[INFO] [stdout]        1344 │+        _comp_compgen -c "${cur##*"$delimiter"}" -- "$@"
[INFO] [stdout]        1345 │+    fi
[INFO] [stdout]        1346 │+
[INFO] [stdout]        1347 │+    # It would seem that in some specific cases we could avoid adding the
[INFO] [stdout]        1348 │+    # prefix to all completions, thereby making the list of suggestions
[INFO] [stdout]        1349 │+    # cleaner, and only adding it when there's exactly one completion.
[INFO] [stdout]        1350 │+    # The cases where this opportunity has been observed involve having
[INFO] [stdout]        1351 │+    # `show-all-if-ambiguous` on, but even that has cases where it fails
[INFO] [stdout]        1352 │+    # and the last separator including everything before it is lost.
[INFO] [stdout]        1353 │+    # https://github.com/scop/bash-completion/pull/913#issuecomment-1490140309
[INFO] [stdout]        1354 │+    local i
[INFO] [stdout]        1355 │+    for i in "${!COMPREPLY[@]}"; do
[INFO] [stdout]        1356 │+        COMPREPLY[i]="$prefix${COMPREPLY[i]}"
[INFO] [stdout]        1357 │+    done
[INFO] [stdout]        1358 │+
[INFO] [stdout]        1359 │+    [[ $delimiter != : ]] || _comp_ltrim_colon_completions "$cur"
[INFO] [stdout]        1360 │+}
[INFO] [stdout]        1361 │+
[INFO] [stdout]        1362 │+# Complete assignment of various known environment variables.
[INFO] [stdout]        1363 │+#
[INFO] [stdout]        1364 │+# The word to be completed is expected to contain the entire assignment,
[INFO] [stdout]        1365 │+# including the variable name and the "=". Some known variables are completed
[INFO] [stdout]        1366 │+# with colon separated values; for those to work, colon should not have been
[INFO] [stdout]        1367 │+# used to split words. See related parameters to _comp_initialize.
[INFO] [stdout]        1368 │+#
[INFO] [stdout]        1369 │+# @param  $1 variable assignment to be completed
[INFO] [stdout]        1370 │+# @return True (0) if variable value completion was attempted,
[INFO] [stdout]        1371 │+#         False (> 0) if not.
[INFO] [stdout]        1372 │+# @since 2.12
[INFO] [stdout]        1373 │+_comp_variable_assignments()
[INFO] [stdout]        1374 │+{
[INFO] [stdout]        1375 │+    local cur=${1-} i
[INFO] [stdout]        1376 │+
[INFO] [stdout]        1377 │+    if [[ $cur =~ ^([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then
[INFO] [stdout]        1378 │+        prev=${BASH_REMATCH[1]}
[INFO] [stdout]        1379 │+        cur=${BASH_REMATCH[2]}
[INFO] [stdout]        1380 │+    else
[INFO] [stdout]        1381 │+        return 1
[INFO] [stdout]        1382 │+    fi
[INFO] [stdout]        1383 │+
[INFO] [stdout]        1384 │+    case $prev in
[INFO] [stdout]        1385 │+        TZ)
[INFO] [stdout]        1386 │+            cur=/usr/share/zoneinfo/$cur
[INFO] [stdout]        1387 │+            _comp_compgen_filedir
[INFO] [stdout]        1388 │+            if ((${#COMPREPLY[@]})); then
[INFO] [stdout]        1389 │+                for i in "${!COMPREPLY[@]}"; do
[INFO] [stdout]        1390 │+                    if [[ ${COMPREPLY[i]} == *.tab ]]; then
[INFO] [stdout]        1391 │+                        unset -v 'COMPREPLY[i]'
[INFO] [stdout]        1392 │+                        continue
[INFO] [stdout]        1393 │+                    elif [[ -d ${COMPREPLY[i]} ]]; then
[INFO] [stdout]        1394 │+                        COMPREPLY[i]+=/
[INFO] [stdout]        1395 │+                        compopt -o nospace
[INFO] [stdout]        1396 │+                    fi
[INFO] [stdout]        1397 │+                    COMPREPLY[i]=${COMPREPLY[i]#/usr/share/zoneinfo/}
[INFO] [stdout]        1398 │+                done
[INFO] [stdout]        1399 │+            fi
[INFO] [stdout]        1400 │+            ;;
[INFO] [stdout]        1401 │+        TERM)
[INFO] [stdout]        1402 │+            _comp_compgen_terms
[INFO] [stdout]        1403 │+            ;;
[INFO] [stdout]        1404 │+        LANG | LC_*)
[INFO] [stdout]        1405 │+            _comp_compgen_split -- "$(locale -a 2>/dev/null)"
[INFO] [stdout]        1406 │+            ;;
[INFO] [stdout]        1407 │+        LANGUAGE)
[INFO] [stdout]        1408 │+            _comp_delimited : -W '$(locale -a 2>/dev/null)'
[INFO] [stdout]        1409 │+            ;;
[INFO] [stdout]        1410 │+        *)
[INFO] [stdout]        1411 │+            _comp_compgen_variables && return 0
[INFO] [stdout]        1412 │+            _comp_compgen -a filedir
[INFO] [stdout]        1413 │+            ;;
[INFO] [stdout]        1414 │+    esac
[INFO] [stdout]        1415 │+
[INFO] [stdout]        1416 │+    return 0
[INFO] [stdout]        1417 │+}
[INFO] [stdout]        1418 │+
[INFO] [stdout]        1419 │+# Initialize completion and deal with various general things: do file
[INFO] [stdout]        1420 │+# and variable completion where appropriate, and adjust prev, words,
[INFO] [stdout]        1421 │+# and cword as if no redirections exist so that completions do not
[INFO] [stdout]        1422 │+# need to deal with them.  Before calling this function, make sure
[INFO] [stdout]        1423 │+# cur, prev, words, and cword are local, ditto split if you use -s.
[INFO] [stdout]        1424 │+#
[INFO] [stdout]        1425 │+# Options:
[INFO] [stdout]        1426 │+#     -n EXCLUDE  Passed to _comp_get_words -n with redirection chars
[INFO] [stdout]        1427 │+#     -e XSPEC    Passed to _comp_compgen_filedir as first arg for stderr
[INFO] [stdout]        1428 │+#                 redirections
[INFO] [stdout]        1429 │+#     -o XSPEC    Passed to _comp_compgen_filedir as first arg for other output
[INFO] [stdout]        1430 │+#                 redirections
[INFO] [stdout]        1431 │+#     -i XSPEC    Passed to _comp_compgen_filedir as first arg for stdin
[INFO] [stdout]        1432 │+#                 redirections
[INFO] [stdout]        1433 │+#     -s          Split long options with _comp__split_longopt, implies -n =
[INFO] [stdout]        1434 │+# @param $1...$3 args Original arguments specified to the completion function.
[INFO] [stdout]        1435 │+#                     The first argument $1 is command name.  The second
[INFO] [stdout]        1436 │+#                     argument $2 is the string before the cursor in the
[INFO] [stdout]        1437 │+#                     current word.  The third argument $3 is the previous
[INFO] [stdout]        1438 │+#                     word.
[INFO] [stdout]        1439 │+# @var[out] cur           Reconstructed current word
[INFO] [stdout]        1440 │+# @var[out] prev          Reconstructed previous word
[INFO] [stdout]        1441 │+# @var[out] words         Reconstructed words
[INFO] [stdout]        1442 │+# @var[out] cword         Current word index in `words`
[INFO] [stdout]        1443 │+# @var[out] comp_args     Original arguments specified to the completion
[INFO] [stdout]        1444 │+#                         function are saved in this array, if the arguments
[INFO] [stdout]        1445 │+#                         $1...$3 is specified.
[INFO] [stdout]        1446 │+# @var[out,opt] was_split When "-s" is specified, `"set"/""` is set depending
[INFO] [stdout]        1447 │+#                         on whether the split happened.
[INFO] [stdout]        1448 │+# @return  True (0) if completion needs further processing,
[INFO] [stdout]        1449 │+#          False (> 0) no further processing is necessary.
[INFO] [stdout]        1450 │+#
[INFO] [stdout]        1451 │+# @since 2.12
[INFO] [stdout]        1452 │+_comp_initialize()
[INFO] [stdout]        1453 │+{
[INFO] [stdout]        1454 │+    local exclude="" opt_split="" outx="" errx="" inx=""
[INFO] [stdout]        1455 │+
[INFO] [stdout]        1456 │+    local flag OPTIND=1 OPTARG="" OPTERR=0
[INFO] [stdout]        1457 │+    while getopts "n:e:o:i:s" flag "$@"; do
[INFO] [stdout]        1458 │+        case $flag in
[INFO] [stdout]        1459 │+            n) exclude+=$OPTARG ;;
[INFO] [stdout]        1460 │+            e) errx=$OPTARG ;;
[INFO] [stdout]        1461 │+            o) outx=$OPTARG ;;
[INFO] [stdout]        1462 │+            i) inx=$OPTARG ;;
[INFO] [stdout]        1463 │+            s)
[INFO] [stdout]        1464 │+                opt_split="set"
[INFO] [stdout]        1465 │+                was_split=""
[INFO] [stdout]        1466 │+                exclude+="="
[INFO] [stdout]        1467 │+                ;;
[INFO] [stdout]        1468 │+            *)
[INFO] [stdout]        1469 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]        1470 │+                return 1
[INFO] [stdout]        1471 │+                ;;
[INFO] [stdout]        1472 │+        esac
[INFO] [stdout]        1473 │+    done
[INFO] [stdout]        1474 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]        1475 │+    (($#)) && comp_args=("$@")
[INFO] [stdout]        1476 │+
[INFO] [stdout]        1477 │+    COMPREPLY=()
[INFO] [stdout]        1478 │+    local redir='@(?(+([0-9])|{[a-zA-Z_]*([a-zA-Z_0-9])})@(>?([>|&])|<?([>&])|<<?([-<]))|&>?(>))'
[INFO] [stdout]        1479 │+    _comp_get_words -n "$exclude<>&" cur prev words cword
[INFO] [stdout]        1480 │+
[INFO] [stdout]        1481 │+    # Complete variable names.
[INFO] [stdout]        1482 │+    _comp_compgen_variables && return 1
[INFO] [stdout]        1483 │+
[INFO] [stdout]        1484 │+    # Complete on files if current is a redirect possibly followed by a
[INFO] [stdout]        1485 │+    # filename, e.g. ">foo", or previous is a "bare" redirect, e.g. ">".
[INFO] [stdout]        1486 │+    # shellcheck disable=SC2053
[INFO] [stdout]        1487 │+    if [[ $cur == $redir* || ${prev-} == $redir ]]; then
[INFO] [stdout]        1488 │+        local xspec
[INFO] [stdout]        1489 │+        case $cur in
[INFO] [stdout]        1490 │+            2'>'*) xspec=${errx-} ;;
[INFO] [stdout]        1491 │+            *'>'*) xspec=${outx-} ;;
[INFO] [stdout]        1492 │+            *'<'*) xspec=${inx-} ;;
[INFO] [stdout]        1493 │+            *)
[INFO] [stdout]        1494 │+                case $prev in
[INFO] [stdout]        1495 │+                    2'>'*) xspec=${errx-} ;;
[INFO] [stdout]        1496 │+                    *'>'*) xspec=${outx-} ;;
[INFO] [stdout]        1497 │+                    *'<'*) xspec=${inx-} ;;
[INFO] [stdout]        1498 │+                esac
[INFO] [stdout]        1499 │+                ;;
[INFO] [stdout]        1500 │+        esac
[INFO] [stdout]        1501 │+        # shellcheck disable=SC2295 # redir is a pattern
[INFO] [stdout]        1502 │+        cur=${cur##$redir}
[INFO] [stdout]        1503 │+        _comp_compgen_filedir "$xspec"
[INFO] [stdout]        1504 │+        return 1
[INFO] [stdout]        1505 │+    fi
[INFO] [stdout]        1506 │+
[INFO] [stdout]        1507 │+    # Remove all redirections so completions don't have to deal with them.
[INFO] [stdout]        1508 │+    local i skip
[INFO] [stdout]        1509 │+    for ((i = 1; i < ${#words[@]}; )); do
[INFO] [stdout]        1510 │+        if [[ ${words[i]} == $redir* ]]; then
[INFO] [stdout]        1511 │+            # If "bare" redirect, remove also the next word (skip=2).
[INFO] [stdout]        1512 │+            # shellcheck disable=SC2053
[INFO] [stdout]        1513 │+            [[ ${words[i]} == $redir ]] && skip=2 || skip=1
[INFO] [stdout]        1514 │+            words=("${words[@]:0:i}" "${words[@]:i+skip}")
[INFO] [stdout]        1515 │+            ((i <= cword)) && ((cword -= skip))
[INFO] [stdout]        1516 │+        else
[INFO] [stdout]        1517 │+            ((i++))
[INFO] [stdout]        1518 │+        fi
[INFO] [stdout]        1519 │+    done
[INFO] [stdout]        1520 │+
[INFO] [stdout]        1521 │+    ((cword <= 0)) && return 1
[INFO] [stdout]        1522 │+    prev=${words[cword - 1]}
[INFO] [stdout]        1523 │+
[INFO] [stdout]        1524 │+    [[ $opt_split ]] && _comp__split_longopt && was_split="set"
[INFO] [stdout]        1525 │+
[INFO] [stdout]        1526 │+    return 0
[INFO] [stdout]        1527 │+}
[INFO] [stdout]        1528 │+
[INFO] [stdout]        1529 │+# Helper function for _comp_compgen_help and _comp_compgen_usage.
[INFO] [stdout]        1530 │+# Obtain the help output based on the arguments.
[INFO] [stdout]        1531 │+# @param $@ args  Arguments specified to the caller.
[INFO] [stdout]        1532 │+# @var[out] _lines
[INFO] [stdout]        1533 │+# @return 2 if the usage is wrong, 1 if no output is obtained, or otherwise 0.
[INFO] [stdout]        1534 │+_comp_compgen_help__get_help_lines()
[INFO] [stdout]        1535 │+{
[INFO] [stdout]        1536 │+    local -a help_cmd
[INFO] [stdout]        1537 │+    case ${1-} in
[INFO] [stdout]        1538 │+        -)
[INFO] [stdout]        1539 │+            if (($# > 1)); then
[INFO] [stdout]        1540 │+                printf 'bash_completion: %s -: extra arguments for -\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1541 │+                printf 'usage: %s -\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1542 │+                printf 'usage: %s -c cmd args...\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1543 │+                printf 'usage: %s [-- args...]\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1544 │+                return 2
[INFO] [stdout]        1545 │+            fi
[INFO] [stdout]        1546 │+            help_cmd=(exec cat)
[INFO] [stdout]        1547 │+            ;;
[INFO] [stdout]        1548 │+        -c)
[INFO] [stdout]        1549 │+            if (($# < 2)); then
[INFO] [stdout]        1550 │+                printf 'bash_completion: %s -c: no command is specified\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1551 │+                printf 'usage: %s -\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1552 │+                printf 'usage: %s -c cmd args...\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1553 │+                printf 'usage: %s [-- args...]\n' "${FUNCNAME[1]}" >&2
[INFO] [stdout]        1554 │+                return 2
[INFO] [stdout]        1555 │+            fi
[INFO] [stdout]        1556 │+            help_cmd=("${@:2}")
[INFO] [stdout]        1557 │+            ;;
[INFO] [stdout]        1558 │+        --) shift 1 ;&
[INFO] [stdout]        1559 │+        *)
[INFO] [stdout]        1560 │+            local REPLY
[INFO] [stdout]        1561 │+            _comp_dequote "${comp_args[0]-}" || REPLY=${comp_args[0]-}
[INFO] [stdout]        1562 │+            help_cmd=("${REPLY:-false}" "$@")
[INFO] [stdout]        1563 │+            ;;
[INFO] [stdout]        1564 │+    esac
[INFO] [stdout]        1565 │+
[INFO] [stdout]        1566 │+    local REPLY
[INFO] [stdout]        1567 │+    _comp_split -l REPLY "$(LC_ALL=C "${help_cmd[@]}" 2>&1)" &&
[INFO] [stdout]        1568 │+        _lines=("${REPLY[@]}")
[INFO] [stdout]        1569 │+}
[INFO] [stdout]        1570 │+
[INFO] [stdout]        1571 │+# Helper function for _comp_compgen_help and _comp_compgen_usage.
[INFO] [stdout]        1572 │+# @var[in,out] options Add options
[INFO] [stdout]        1573 │+# @return True (0) if an option was found, False (> 0) otherwise
[INFO] [stdout]        1574 │+_comp_compgen_help__parse()
[INFO] [stdout]        1575 │+{
[INFO] [stdout]        1576 │+    local option option2 i
[INFO] [stdout]        1577 │+
[INFO] [stdout]        1578 │+    # Take first found long option, or first one (short) if not found.
[INFO] [stdout]        1579 │+    option=
[INFO] [stdout]        1580 │+    local -a array
[INFO] [stdout]        1581 │+    if _comp_split -F $' \t\n,/|' array "$1"; then
[INFO] [stdout]        1582 │+        for i in "${array[@]}"; do
[INFO] [stdout]        1583 │+            case "$i" in
[INFO] [stdout]        1584 │+                ---*) break ;;
[INFO] [stdout]        1585 │+                --?*)
[INFO] [stdout]        1586 │+                    option=$i
[INFO] [stdout]        1587 │+                    break
[INFO] [stdout]        1588 │+                    ;;
[INFO] [stdout]        1589 │+                -?*) [[ $option ]] || option=$i ;;
[INFO] [stdout]        1590 │+                *) break ;;
[INFO] [stdout]        1591 │+            esac
[INFO] [stdout]        1592 │+        done
[INFO] [stdout]        1593 │+    fi
[INFO] [stdout]        1594 │+    [[ $option ]] || return 1
[INFO] [stdout]        1595 │+
[INFO] [stdout]        1596 │+    # Expand --[no]foo to --foo and --nofoo etc
[INFO] [stdout]        1597 │+    if [[ $option =~ (\[((no|dont)-?)\]). ]]; then
[INFO] [stdout]        1598 │+        option2=${option/"${BASH_REMATCH[1]}"/}
[INFO] [stdout]        1599 │+        option2=${option2%%[<{().[]*}
[INFO] [stdout]        1600 │+        options+=("${option2/=*/=}")
[INFO] [stdout]        1601 │+        option=${option/"${BASH_REMATCH[1]}"/"${BASH_REMATCH[2]}"}
[INFO] [stdout]        1602 │+    fi
[INFO] [stdout]        1603 │+
[INFO] [stdout]        1604 │+    [[ $option =~ ^([^=<{().[]|\.[A-Za-z0-9])+=? ]] &&
[INFO] [stdout]        1605 │+        options+=("$BASH_REMATCH")
[INFO] [stdout]        1606 │+}
[INFO] [stdout]        1607 │+
[INFO] [stdout]        1608 │+# Parse GNU style help output of the given command and generate and store
[INFO] [stdout]        1609 │+# completions in an array. The help output is produced in the way depending on
[INFO] [stdout]        1610 │+# the usage:
[INFO] [stdout]        1611 │+# usage: _comp_compgen_help -              # read from stdin
[INFO] [stdout]        1612 │+# usage: _comp_compgen_help -c cmd args... # run "cmd args..."
[INFO] [stdout]        1613 │+# usage: _comp_compgen_help [[--] args...] # run "${comp_args[0]} args..."
[INFO] [stdout]        1614 │+# When no arguments are specified, `--help` is assumed.
[INFO] [stdout]        1615 │+#
[INFO] [stdout]        1616 │+# @var[in] comp_args[0]
[INFO] [stdout]        1617 │+# @since 2.12
[INFO] [stdout]        1618 │+_comp_compgen_help()
[INFO] [stdout]        1619 │+{
[INFO] [stdout]        1620 │+    (($#)) || set -- -- --help
[INFO] [stdout]        1621 │+
[INFO] [stdout]        1622 │+    local -a _lines
[INFO] [stdout]        1623 │+    _comp_compgen_help__get_help_lines "$@" || return "$?"
[INFO] [stdout]        1624 │+
[INFO] [stdout]        1625 │+    local -a options=()
[INFO] [stdout]        1626 │+    local _line
[INFO] [stdout]        1627 │+    for _line in "${_lines[@]}"; do
[INFO] [stdout]        1628 │+        [[ $_line == *([[:blank:]])-* ]] || continue
[INFO] [stdout]        1629 │+        # transform "-f FOO, --foo=FOO" to "-f , --foo=FOO" etc
[INFO] [stdout]        1630 │+        while [[ $_line =~ ((^|[^-])-[A-Za-z0-9?][[:space:]]+)\[?[A-Z0-9]+([,_-]+[A-Z0-9]+)?(\.\.+)?\]? ]]; do
[INFO] [stdout]        1631 │+            _line=${_line/"${BASH_REMATCH[0]}"/"${BASH_REMATCH[1]}"}
[INFO] [stdout]        1632 │+        done
[INFO] [stdout]        1633 │+        _comp_compgen_help__parse "${_line// or /, }"
[INFO] [stdout]        1634 │+    done
[INFO] [stdout]        1635 │+    ((${#options[@]})) || return 1
[INFO] [stdout]        1636 │+
[INFO] [stdout]        1637 │+    _comp_compgen -U options -- -W '"${options[@]}"'
[INFO] [stdout]        1638 │+    return 0
[INFO] [stdout]        1639 │+}
[INFO] [stdout]        1640 │+
[INFO] [stdout]        1641 │+# Parse BSD style usage output (options in brackets) of the given command. The
[INFO] [stdout]        1642 │+# help output is produced in the way depending on the usage:
[INFO] [stdout]        1643 │+# usage: _comp_compgen_usage -              # read from stdin
[INFO] [stdout]        1644 │+# usage: _comp_compgen_usage -c cmd args... # run "cmd args..."
[INFO] [stdout]        1645 │+# usage: _comp_compgen_usage [[--] args...] # run "${comp_args[0]} args..."
[INFO] [stdout]        1646 │+# When no arguments are specified, `--usage` is assumed.
[INFO] [stdout]        1647 │+#
[INFO] [stdout]        1648 │+# @var[in] comp_args[0]
[INFO] [stdout]        1649 │+# @since 2.12
[INFO] [stdout]        1650 │+_comp_compgen_usage()
[INFO] [stdout]        1651 │+{
[INFO] [stdout]        1652 │+    (($#)) || set -- -- --usage
[INFO] [stdout]        1653 │+
[INFO] [stdout]        1654 │+    local -a _lines
[INFO] [stdout]        1655 │+    _comp_compgen_help__get_help_lines "$@" || return "$?"
[INFO] [stdout]        1656 │+
[INFO] [stdout]        1657 │+    local -a options=()
[INFO] [stdout]        1658 │+    local _line _match _option _i _char
[INFO] [stdout]        1659 │+    for _line in "${_lines[@]}"; do
[INFO] [stdout]        1660 │+        while [[ $_line =~ \[[[:space:]]*(-[^]]+)[[:space:]]*\] ]]; do
[INFO] [stdout]        1661 │+            _match=${BASH_REMATCH[0]}
[INFO] [stdout]        1662 │+            _option=${BASH_REMATCH[1]}
[INFO] [stdout]        1663 │+            case $_option in
[INFO] [stdout]        1664 │+                -?(\[)+([a-zA-Z0-9?]))
[INFO] [stdout]        1665 │+                    # Treat as bundled short options
[INFO] [stdout]        1666 │+                    for ((_i = 1; _i < ${#_option}; _i++)); do
[INFO] [stdout]        1667 │+                        _char=${_option:_i:1}
[INFO] [stdout]        1668 │+                        [[ $_char != '[' ]] && options+=("-$_char")
[INFO] [stdout]        1669 │+                    done
[INFO] [stdout]        1670 │+                    ;;
[INFO] [stdout]        1671 │+                *)
[INFO] [stdout]        1672 │+                    _comp_compgen_help__parse "$_option"
[INFO] [stdout]        1673 │+                    ;;
[INFO] [stdout]        1674 │+            esac
[INFO] [stdout]        1675 │+            _line=${_line#*"$_match"}
[INFO] [stdout]        1676 │+        done
[INFO] [stdout]        1677 │+    done
[INFO] [stdout]        1678 │+    ((${#options[@]})) || return 1
[INFO] [stdout]        1679 │+
[INFO] [stdout]        1680 │+    _comp_compgen -U options -- -W '"${options[@]}"'
[INFO] [stdout]        1681 │+    return 0
[INFO] [stdout]        1682 │+}
[INFO] [stdout]        1683 │+
[INFO] [stdout]        1684 │+# This function completes on signal names (minus the SIG prefix)
[INFO] [stdout]        1685 │+# @param $1 prefix
[INFO] [stdout]        1686 │+#
[INFO] [stdout]        1687 │+# @since 2.12
[INFO] [stdout]        1688 │+_comp_compgen_signals()
[INFO] [stdout]        1689 │+{
[INFO] [stdout]        1690 │+    local -a sigs
[INFO] [stdout]        1691 │+    _comp_compgen -v sigs -c "SIG${cur#"${1-}"}" -- -A signal &&
[INFO] [stdout]        1692 │+        _comp_compgen -RU sigs -- -P "${1-}" -W '"${sigs[@]#SIG}"'
[INFO] [stdout]        1693 │+}
[INFO] [stdout]        1694 │+
[INFO] [stdout]        1695 │+# This function completes on known mac addresses
[INFO] [stdout]        1696 │+#
[INFO] [stdout]        1697 │+# @since 2.12
[INFO] [stdout]        1698 │+_comp_compgen_mac_addresses()
[INFO] [stdout]        1699 │+{
[INFO] [stdout]        1700 │+    local _re='\([A-Fa-f0-9]\{2\}:\)\{5\}[A-Fa-f0-9]\{2\}'
[INFO] [stdout]        1701 │+    local PATH="$PATH:/sbin:/usr/sbin"
[INFO] [stdout]        1702 │+    local -a addresses
[INFO] [stdout]        1703 │+
[INFO] [stdout]        1704 │+    # Local interfaces
[INFO] [stdout]        1705 │+    # - ifconfig on Linux: HWaddr or ether
[INFO] [stdout]        1706 │+    # - ifconfig on FreeBSD: ether
[INFO] [stdout]        1707 │+    # - ip link: link/ether
[INFO] [stdout]        1708 │+    _comp_compgen -v addresses split -- "$(
[INFO] [stdout]        1709 │+        {
[INFO] [stdout]        1710 │+            ip -c=never link show || ip link show || LC_ALL=C ifconfig -a
[INFO] [stdout]        1711 │+        } 2>/dev/null | command sed -ne \
[INFO] [stdout]        1712 │+            "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($_re\)[[:space:]].*/\1/p" -ne \
[INFO] [stdout]        1713 │+            "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($_re\)[[:space:]]*$/\1/p" -ne \
[INFO] [stdout]        1714 │+            "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($_re\)[[:space:]].*|\2|p" -ne \
[INFO] [stdout]        1715 │+            "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($_re\)[[:space:]]*$|\2|p"
[INFO] [stdout]        1716 │+    )"
[INFO] [stdout]        1717 │+
[INFO] [stdout]        1718 │+    # ARP cache
[INFO] [stdout]        1719 │+    _comp_compgen -av addresses split -- "$(
[INFO] [stdout]        1720 │+        {
[INFO] [stdout]        1721 │+            arp -an || ip -c=never neigh show || ip neigh show
[INFO] [stdout]        1722 │+        } 2>/dev/null | command sed -ne \
[INFO] [stdout]        1723 │+            "s/.*[[:space:]]\($_re\)[[:space:]].*/\1/p" -ne \
[INFO] [stdout]        1724 │+            "s/.*[[:space:]]\($_re\)[[:space:]]*$/\1/p"
[INFO] [stdout]        1725 │+    )"
[INFO] [stdout]        1726 │+
[INFO] [stdout]        1727 │+    # /etc/ethers
[INFO] [stdout]        1728 │+    _comp_compgen -av addresses split -- "$(command sed -ne \
[INFO] [stdout]        1729 │+        "s/^[[:space:]]*\($_re\)[[:space:]].*/\1/p" /etc/ethers 2>/dev/null)"
[INFO] [stdout]        1730 │+
[INFO] [stdout]        1731 │+    _comp_compgen -U addresses ltrim_colon "${addresses[@]}"
[INFO] [stdout]        1732 │+}
[INFO] [stdout]        1733 │+
[INFO] [stdout]        1734 │+# This function completes on configured network interfaces
[INFO] [stdout]        1735 │+#
[INFO] [stdout]        1736 │+# @since 2.12
[INFO] [stdout]        1737 │+_comp_compgen_configured_interfaces()
[INFO] [stdout]        1738 │+{
[INFO] [stdout]        1739 │+    local -a files
[INFO] [stdout]        1740 │+    if [[ -f /etc/debian_version ]]; then
[INFO] [stdout]        1741 │+        # Debian system
[INFO] [stdout]        1742 │+        _comp_expand_glob files '/etc/network/interfaces /etc/network/interfaces.d/*' || return 0
[INFO] [stdout]        1743 │+        _comp_compgen -U files split -- "$(command sed -ne \
[INFO] [stdout]        1744 │+            's|^iface \([^ ]\{1,\}\).*$|\1|p' "${files[@]}" 2>/dev/null)"
[INFO] [stdout]        1745 │+    elif [[ -f /etc/SuSE-release ]]; then
[INFO] [stdout]        1746 │+        # SuSE system
[INFO] [stdout]        1747 │+        _comp_expand_glob files '/etc/sysconfig/network/ifcfg-*' || return 0
[INFO] [stdout]        1748 │+        _comp_compgen -U files split -- "$(printf '%s\n' "${files[@]}" |
[INFO] [stdout]        1749 │+            command sed -ne 's|.*ifcfg-\([^*].*\)$|\1|p')"
[INFO] [stdout]        1750 │+    elif [[ -f /etc/pld-release ]]; then
[INFO] [stdout]        1751 │+        # PLD Linux
[INFO] [stdout]        1752 │+        _comp_compgen -U files split -- "$(command ls -B /etc/sysconfig/interfaces |
[INFO] [stdout]        1753 │+            command sed -ne 's|.*ifcfg-\([^*].*\)$|\1|p')"
[INFO] [stdout]        1754 │+    else
[INFO] [stdout]        1755 │+        # Assume Red Hat
[INFO] [stdout]        1756 │+        _comp_expand_glob files '/etc/sysconfig/network-scripts/ifcfg-*' || return 0
[INFO] [stdout]        1757 │+        _comp_compgen -U files split -- "$(printf '%s\n' "${files[@]}" |
[INFO] [stdout]        1758 │+            command sed -ne 's|.*ifcfg-\([^*].*\)$|\1|p')"
[INFO] [stdout]        1759 │+    fi
[INFO] [stdout]        1760 │+}
[INFO] [stdout]        1761 │+
[INFO] [stdout]        1762 │+# Local IP addresses.
[INFO] [stdout]        1763 │+# If producing IPv6 completions, `_comp_initialize` with `-n :`.
[INFO] [stdout]        1764 │+#
[INFO] [stdout]        1765 │+# -4: IPv4 addresses only (default)
[INFO] [stdout]        1766 │+# -6: IPv6 addresses only
[INFO] [stdout]        1767 │+# -a: All addresses
[INFO] [stdout]        1768 │+#
[INFO] [stdout]        1769 │+# @since 2.12
[INFO] [stdout]        1770 │+_comp_compgen_ip_addresses()
[INFO] [stdout]        1771 │+{
[INFO] [stdout]        1772 │+    local _n
[INFO] [stdout]        1773 │+    case ${1-} in
[INFO] [stdout]        1774 │+        -a) _n='6\{0,1\}' ;;
[INFO] [stdout]        1775 │+        -6) _n='6' ;;
[INFO] [stdout]        1776 │+        *) _n= ;;
[INFO] [stdout]        1777 │+    esac
[INFO] [stdout]        1778 │+    local PATH=$PATH:/sbin
[INFO] [stdout]        1779 │+    local addrs
[INFO] [stdout]        1780 │+    _comp_compgen -v addrs split -- "$({
[INFO] [stdout]        1781 │+        ip -c=never addr show || ip addr show || LC_ALL=C ifconfig -a
[INFO] [stdout]        1782 │+    } 2>/dev/null |
[INFO] [stdout]        1783 │+        command sed -e 's/[[:space:]]addr:/ /' -ne \
[INFO] [stdout]        1784 │+            "s|.*inet${_n}[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p")" ||
[INFO] [stdout]        1785 │+        return
[INFO] [stdout]        1786 │+
[INFO] [stdout]        1787 │+    if [[ ! $_n ]]; then
[INFO] [stdout]        1788 │+        _comp_compgen -U addrs set "${addrs[@]}"
[INFO] [stdout]        1789 │+    else
[INFO] [stdout]        1790 │+        _comp_compgen -U addrs ltrim_colon "${addrs[@]}"
[INFO] [stdout]        1791 │+    fi
[INFO] [stdout]        1792 │+}
[INFO] [stdout]        1793 │+
[INFO] [stdout]        1794 │+# This function completes on available kernel versions
[INFO] [stdout]        1795 │+#
[INFO] [stdout]        1796 │+# @since 2.12
[INFO] [stdout]        1797 │+_comp_compgen_kernel_versions()
[INFO] [stdout]        1798 │+{
[INFO] [stdout]        1799 │+    _comp_compgen_split -- "$(command ls /lib/modules)"
[INFO] [stdout]        1800 │+}
[INFO] [stdout]        1801 │+
[INFO] [stdout]        1802 │+# This function completes on all available network interfaces
[INFO] [stdout]        1803 │+# -a: restrict to active interfaces only
[INFO] [stdout]        1804 │+# -w: restrict to wireless interfaces only
[INFO] [stdout]        1805 │+#
[INFO] [stdout]        1806 │+# @since 2.12
[INFO] [stdout]        1807 │+_comp_compgen_available_interfaces()
[INFO] [stdout]        1808 │+{
[INFO] [stdout]        1809 │+    local PATH=$PATH:/sbin
[INFO] [stdout]        1810 │+    local generated
[INFO] [stdout]        1811 │+    _comp_compgen -v generated split -- "$({
[INFO] [stdout]        1812 │+        if [[ ${1-} == -w ]]; then
[INFO] [stdout]        1813 │+            iwconfig
[INFO] [stdout]        1814 │+        elif [[ ${1-} == -a ]]; then
[INFO] [stdout]        1815 │+            # Note: we prefer ip (iproute2) to ifconfig (inetutils) since long
[INFO] [stdout]        1816 │+            # interface names will be truncated by ifconfig [1].
[INFO] [stdout]        1817 │+            # [1]: https://github.com/scop/bash-completion/issues/1089
[INFO] [stdout]        1818 │+            ip -c=never link show up || ip link show up || ifconfig
[INFO] [stdout]        1819 │+        else
[INFO] [stdout]        1820 │+            ip -c=never link show || ip link show || ifconfig -a
[INFO] [stdout]        1821 │+        fi
[INFO] [stdout]        1822 │+    } 2>/dev/null | _comp_awk \
[INFO] [stdout]        1823 │+        '/^[^ \t]/ { if ($1 ~ /^[0-9]+:/) { print $2 } else { print $1 } }')" &&
[INFO] [stdout]        1824 │+        _comp_compgen -U generated set "${generated[@]%:}"
[INFO] [stdout]        1825 │+}
[INFO] [stdout]        1826 │+
[INFO] [stdout]        1827 │+# Echo number of CPUs, falling back to 1 on failure.
[INFO] [stdout]        1828 │+# @var[out] REPLY
[INFO] [stdout]        1829 │+# @return 0 if it successfully obtained the number of CPUs, or otherwise 1
[INFO] [stdout]        1830 │+# @since 2.12
[INFO] [stdout]        1831 │+_comp_get_ncpus()
[INFO] [stdout]        1832 │+{
[INFO] [stdout]        1833 │+    local var=NPROCESSORS_ONLN
[INFO] [stdout]        1834 │+    [[ $OSTYPE == *@(linux|msys|cygwin)* ]] && var=_$var
[INFO] [stdout]        1835 │+    if REPLY=$(getconf $var 2>/dev/null) && ((REPLY >= 1)); then
[INFO] [stdout]        1836 │+        return 0
[INFO] [stdout]        1837 │+    else
[INFO] [stdout]        1838 │+        REPLY=1
[INFO] [stdout]        1839 │+        return 1
[INFO] [stdout]        1840 │+    fi
[INFO] [stdout]        1841 │+}
[INFO] [stdout]        1842 │+
[INFO] [stdout]        1843 │+# Perform tilde (~) completion
[INFO] [stdout]        1844 │+# @return  False (1) if completion needs further processing,
[INFO] [stdout]        1845 │+#          True (0) if tilde is followed by a valid username, completions are
[INFO] [stdout]        1846 │+#          put in COMPREPLY and no further processing is necessary.
[INFO] [stdout]        1847 │+# @since 2.12
[INFO] [stdout]        1848 │+_comp_compgen_tilde()
[INFO] [stdout]        1849 │+{
[INFO] [stdout]        1850 │+    if [[ ${cur-} == \~* && $cur != */* ]]; then
[INFO] [stdout]        1851 │+        # Try generate ~username completions
[INFO] [stdout]        1852 │+        if _comp_compgen -c "${cur#\~}" -- -P '~' -u; then
[INFO] [stdout]        1853 │+            # 2>/dev/null for direct invocation, e.g. in the
[INFO] [stdout]        1854 │+            # _comp_compgen_tilde unit test
[INFO] [stdout]        1855 │+            compopt -o filenames 2>/dev/null
[INFO] [stdout]        1856 │+            return 0
[INFO] [stdout]        1857 │+        fi
[INFO] [stdout]        1858 │+    fi
[INFO] [stdout]        1859 │+    return 1
[INFO] [stdout]        1860 │+}
[INFO] [stdout]        1861 │+
[INFO] [stdout]        1862 │+# Expand string starting with tilde (~)
[INFO] [stdout]        1863 │+# We want to expand ~foo/... to /home/foo/... to avoid problems when
[INFO] [stdout]        1864 │+# word-to-complete starting with a tilde is fed to commands and ending up
[INFO] [stdout]        1865 │+# quoted instead of expanded.
[INFO] [stdout]        1866 │+# Only the first portion of the variable from the tilde up to the first slash
[INFO] [stdout]        1867 │+# (~../) is expanded.  The remainder of the variable, containing for example
[INFO] [stdout]        1868 │+# a dollar sign variable ($) or asterisk (*) is not expanded.
[INFO] [stdout]        1869 │+# Example usage:
[INFO] [stdout]        1870 │+#
[INFO] [stdout]        1871 │+#    $ _comp_expand_tilde "~"; echo "$REPLY"
[INFO] [stdout]        1872 │+#
[INFO] [stdout]        1873 │+# Example output:
[INFO] [stdout]        1874 │+#
[INFO] [stdout]        1875 │+#       $1                 REPLY
[INFO] [stdout]        1876 │+#    --------         ----------------
[INFO] [stdout]        1877 │+#    ~                /home/user
[INFO] [stdout]        1878 │+#    ~foo/bar         /home/foo/bar
[INFO] [stdout]        1879 │+#    ~foo/$HOME       /home/foo/$HOME
[INFO] [stdout]        1880 │+#    ~foo/a  b        /home/foo/a  b
[INFO] [stdout]        1881 │+#    ~foo/*           /home/foo/*
[INFO] [stdout]        1882 │+#
[INFO] [stdout]        1883 │+# @param $1     Value to expand
[INFO] [stdout]        1884 │+# @var[out] REPLY Expanded result
[INFO] [stdout]        1885 │+# @since 2.12
[INFO] [stdout]        1886 │+_comp_expand_tilde()
[INFO] [stdout]        1887 │+{
[INFO] [stdout]        1888 │+    REPLY=$1
[INFO] [stdout]        1889 │+    if [[ $1 == \~* ]]; then
[INFO] [stdout]        1890 │+        printf -v REPLY '~%q' "${1#\~}"
[INFO] [stdout]        1891 │+        eval "REPLY=$REPLY"
[INFO] [stdout]        1892 │+    fi
[INFO] [stdout]        1893 │+}
[INFO] [stdout]        1894 │+
[INFO] [stdout]        1895 │+# This function expands tildes in pathnames
[INFO] [stdout]        1896 │+#
[INFO] [stdout]        1897 │+# @since 2.12
[INFO] [stdout]        1898 │+_comp_expand()
[INFO] [stdout]        1899 │+{
[INFO] [stdout]        1900 │+    # Expand ~username type directory specifications.  We want to expand
[INFO] [stdout]        1901 │+    # ~foo/... to /home/foo/... to avoid problems when $cur starting with
[INFO] [stdout]        1902 │+    # a tilde is fed to commands and ending up quoted instead of expanded.
[INFO] [stdout]        1903 │+
[INFO] [stdout]        1904 │+    case ${cur-} in
[INFO] [stdout]        1905 │+        ~*/*)
[INFO] [stdout]        1906 │+            local REPLY
[INFO] [stdout]        1907 │+            _comp_expand_tilde "$cur"
[INFO] [stdout]        1908 │+            cur=$REPLY
[INFO] [stdout]        1909 │+            ;;
[INFO] [stdout]        1910 │+        ~*)
[INFO] [stdout]        1911 │+            _comp_compgen -v COMPREPLY tilde &&
[INFO] [stdout]        1912 │+                eval "COMPREPLY[0]=$(printf ~%q "${COMPREPLY[0]#\~}")" &&
[INFO] [stdout]        1913 │+                return 1
[INFO] [stdout]        1914 │+            ;;
[INFO] [stdout]        1915 │+    esac
[INFO] [stdout]        1916 │+    return 0
[INFO] [stdout]        1917 │+}
[INFO] [stdout]        1918 │+
[INFO] [stdout]        1919 │+# Process ID related functions.
[INFO] [stdout]        1920 │+# for AIX and Solaris we use X/Open syntax, BSD for others.
[INFO] [stdout]        1921 │+#
[INFO] [stdout]        1922 │+# @since 2.12
[INFO] [stdout]        1923 │+if [[ $OSTYPE == *@(solaris|aix)* ]]; then
[INFO] [stdout]        1924 │+    # This function completes on process IDs.
[INFO] [stdout]        1925 │+    _comp_compgen_pids()
[INFO] [stdout]        1926 │+    {
[INFO] [stdout]        1927 │+        _comp_compgen_split -- "$(command ps -efo pid | command sed 1d)"
[INFO] [stdout]        1928 │+    }
[INFO] [stdout]        1929 │+
[INFO] [stdout]        1930 │+    _comp_compgen_pgids()
[INFO] [stdout]        1931 │+    {
[INFO] [stdout]        1932 │+        _comp_compgen_split -- "$(command ps -efo pgid | command sed 1d)"
[INFO] [stdout]        1933 │+    }
[INFO] [stdout]        1934 │+    _comp_compgen_pnames()
[INFO] [stdout]        1935 │+    {
[INFO] [stdout]        1936 │+        _comp_compgen_split -X '<defunct>' -- "$(command ps -efo comm |
[INFO] [stdout]        1937 │+            command sed -e 1d -e 's:.*/::' -e 's/^-//' | sort -u)"
[INFO] [stdout]        1938 │+    }
[INFO] [stdout]        1939 │+else
[INFO] [stdout]        1940 │+    _comp_compgen_pids()
[INFO] [stdout]        1941 │+    {
[INFO] [stdout]        1942 │+        _comp_compgen_split -- "$(command ps ax -o pid=)"
[INFO] [stdout]        1943 │+    }
[INFO] [stdout]        1944 │+    _comp_compgen_pgids()
[INFO] [stdout]        1945 │+    {
[INFO] [stdout]        1946 │+        _comp_compgen_split -- "$(command ps ax -o pgid=)"
[INFO] [stdout]        1947 │+    }
[INFO] [stdout]        1948 │+    # @param $1 if -s, don't try to avoid truncated command names
[INFO] [stdout]        1949 │+    _comp_compgen_pnames()
[INFO] [stdout]        1950 │+    {
[INFO] [stdout]        1951 │+        local -a procs=()
[INFO] [stdout]        1952 │+        if [[ ${1-} == -s ]]; then
[INFO] [stdout]        1953 │+            _comp_split procs "$(command ps ax -o comm | command sed -e 1d)"
[INFO] [stdout]        1954 │+        else
[INFO] [stdout]        1955 │+            # Some versions of ps don't support "command", but do "comm", e.g.
[INFO] [stdout]        1956 │+            # some busybox ones. Fall back
[INFO] [stdout]        1957 │+            local -a psout
[INFO] [stdout]        1958 │+            _comp_split -l psout "$({
[INFO] [stdout]        1959 │+                command ps ax -o command= || command ps ax -o comm=
[INFO] [stdout]        1960 │+            } 2>/dev/null)"
[INFO] [stdout]        1961 │+            local line i=-1
[INFO] [stdout]        1962 │+            for line in "${psout[@]}"; do
[INFO] [stdout]        1963 │+                if ((i == -1)); then
[INFO] [stdout]        1964 │+                    # First line, see if it has COMMAND column header. For
[INFO] [stdout]        1965 │+                    # example some busybox ps versions do that, i.e. don't
[INFO] [stdout]        1966 │+                    # respect command=
[INFO] [stdout]        1967 │+                    if [[ $line =~ ^(.*[[:space:]])COMMAND([[:space:]]|$) ]]; then
[INFO] [stdout]        1968 │+                        # It does; store its index.
[INFO] [stdout]        1969 │+                        i=${#BASH_REMATCH[1]}
[INFO] [stdout]        1970 │+                    else
[INFO] [stdout]        1971 │+                        # Nope, fall through to "regular axo command=" parsing.
[INFO] [stdout]        1972 │+                        break
[INFO] [stdout]        1973 │+                    fi
[INFO] [stdout]        1974 │+                else
[INFO] [stdout]        1975 │+                    #
[INFO] [stdout]        1976 │+                    line=${line:i}   # take command starting from found index
[INFO] [stdout]        1977 │+                    line=${line%% *} # trim arguments
[INFO] [stdout]        1978 │+                    [[ $line ]] && procs+=("$line")
[INFO] [stdout]        1979 │+                fi
[INFO] [stdout]        1980 │+            done
[INFO] [stdout]        1981 │+            if ((i == -1)); then
[INFO] [stdout]        1982 │+                # Regular command= parsing
[INFO] [stdout]        1983 │+                for line in "${psout[@]}"; do
[INFO] [stdout]        1984 │+                    if [[ $line =~ ^[[(](.+)[])]$ ]]; then
[INFO] [stdout]        1985 │+                        procs+=("${BASH_REMATCH[1]}")
[INFO] [stdout]        1986 │+                    else
[INFO] [stdout]        1987 │+                        line=${line%% *}      # trim arguments
[INFO] [stdout]        1988 │+                        line=${line##@(*/|-)} # trim leading path and -
[INFO] [stdout]        1989 │+                        [[ $line ]] && procs+=("$line")
[INFO] [stdout]        1990 │+                    fi
[INFO] [stdout]        1991 │+                done
[INFO] [stdout]        1992 │+            fi
[INFO] [stdout]        1993 │+        fi
[INFO] [stdout]        1994 │+        ((${#procs[@]})) &&
[INFO] [stdout]        1995 │+            _comp_compgen -U procs -- -X "<defunct>" -W '"${procs[@]}"'
[INFO] [stdout]        1996 │+    }
[INFO] [stdout]        1997 │+fi
[INFO] [stdout]        1998 │+
[INFO] [stdout]        1999 │+# This function completes on user IDs
[INFO] [stdout]        2000 │+#
[INFO] [stdout]        2001 │+# @since 2.12
[INFO] [stdout]        2002 │+_comp_compgen_uids()
[INFO] [stdout]        2003 │+{
[INFO] [stdout]        2004 │+    if type getent &>/dev/null; then
[INFO] [stdout]        2005 │+        _comp_compgen_split -- "$(getent passwd | cut -d: -f3)"
[INFO] [stdout]        2006 │+    elif type perl &>/dev/null; then
[INFO] [stdout]        2007 │+        _comp_compgen_split -- "$(perl -e 'while (($uid) = (getpwent)[2]) { print $uid . "\n" }')"
[INFO] [stdout]        2008 │+    else
[INFO] [stdout]        2009 │+        # make do with /etc/passwd
[INFO] [stdout]        2010 │+        _comp_compgen_split -- "$(cut -d: -f3 /etc/passwd)"
[INFO] [stdout]        2011 │+    fi
[INFO] [stdout]        2012 │+}
[INFO] [stdout]        2013 │+
[INFO] [stdout]        2014 │+# This function completes on group IDs
[INFO] [stdout]        2015 │+#
[INFO] [stdout]        2016 │+# @since 2.12
[INFO] [stdout]        2017 │+_comp_compgen_gids()
[INFO] [stdout]        2018 │+{
[INFO] [stdout]        2019 │+    if type getent &>/dev/null; then
[INFO] [stdout]        2020 │+        _comp_compgen_split -- "$(getent group | cut -d: -f3)"
[INFO] [stdout]        2021 │+    elif type perl &>/dev/null; then
[INFO] [stdout]        2022 │+        _comp_compgen_split -- "$(perl -e 'while (($gid) = (getgrent)[2]) { print $gid . "\n" }')"
[INFO] [stdout]        2023 │+    else
[INFO] [stdout]        2024 │+        # make do with /etc/group
[INFO] [stdout]        2025 │+        _comp_compgen_split -- "$(cut -d: -f3 /etc/group)"
[INFO] [stdout]        2026 │+    fi
[INFO] [stdout]        2027 │+}
[INFO] [stdout]        2028 │+
[INFO] [stdout]        2029 │+# Glob for matching various backup files.
[INFO] [stdout]        2030 │+#
[INFO] [stdout]        2031 │+_comp_backup_glob='@(#*#|*@(~|.@(bak|orig|rej|swp|@(dpkg|ucf)-*|rpm@(orig|new|save))))'
[INFO] [stdout]        2032 │+
[INFO] [stdout]        2033 │+# Complete on xinetd services
[INFO] [stdout]        2034 │+#
[INFO] [stdout]        2035 │+# @since 2.12
[INFO] [stdout]        2036 │+_comp_compgen_xinetd_services()
[INFO] [stdout]        2037 │+{
[INFO] [stdout]        2038 │+    local xinetddir=${_comp__test_xinetd_dir:-/etc/xinetd.d}
[INFO] [stdout]        2039 │+    if [[ -d $xinetddir ]]; then
[INFO] [stdout]        2040 │+        local -a svcs
[INFO] [stdout]        2041 │+        if _comp_expand_glob svcs '$xinetddir/!($_comp_backup_glob)'; then
[INFO] [stdout]        2042 │+            _comp_compgen -U svcs -U xinetddir -- -W '"${svcs[@]#$xinetddir/}"'
[INFO] [stdout]        2043 │+        fi
[INFO] [stdout]        2044 │+    fi
[INFO] [stdout]        2045 │+}
[INFO] [stdout]        2046 │+
[INFO] [stdout]        2047 │+# This function completes on services
[INFO] [stdout]        2048 │+#
[INFO] [stdout]        2049 │+# @since 2.12
[INFO] [stdout]        2050 │+_comp_compgen_services()
[INFO] [stdout]        2051 │+{
[INFO] [stdout]        2052 │+    local sysvdirs
[INFO] [stdout]        2053 │+    _comp_sysvdirs || return 1
[INFO] [stdout]        2054 │+
[INFO] [stdout]        2055 │+    local services
[INFO] [stdout]        2056 │+    _comp_expand_glob services '${sysvdirs[0]}/!($_comp_backup_glob|functions|README)'
[INFO] [stdout]        2057 │+
[INFO] [stdout]        2058 │+    local _generated=$({
[INFO] [stdout]        2059 │+        systemctl list-units --full --all ||
[INFO] [stdout]        2060 │+            systemctl list-unit-files
[INFO] [stdout]        2061 │+    } 2>/dev/null |
[INFO] [stdout]        2062 │+        _comp_awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }')
[INFO] [stdout]        2063 │+    _comp_split -la services "$_generated"
[INFO] [stdout]        2064 │+
[INFO] [stdout]        2065 │+    if [[ -x /sbin/upstart-udev-bridge ]]; then
[INFO] [stdout]        2066 │+        _comp_split -la services "$(initctl list 2>/dev/null | cut -d' ' -f1)"
[INFO] [stdout]        2067 │+    fi
[INFO] [stdout]        2068 │+
[INFO] [stdout]        2069 │+    ((${#services[@]})) || return 1
[INFO] [stdout]        2070 │+    _comp_compgen -U services -U sysvdirs -- -W '"${services[@]#${sysvdirs[0]}/}"'
[INFO] [stdout]        2071 │+}
[INFO] [stdout]        2072 │+
[INFO] [stdout]        2073 │+# This completes on a list of all available service scripts for the
[INFO] [stdout]        2074 │+# 'service' command and/or the SysV init.d directory, followed by
[INFO] [stdout]        2075 │+# that script's available commands
[INFO] [stdout]        2076 │+# This function is in the main bash_completion file rather than in a separate
[INFO] [stdout]        2077 │+# one, because we set it up eagerly as completer for scripts in sysv init dirs
[INFO] [stdout]        2078 │+# below.
[INFO] [stdout]        2079 │+#
[INFO] [stdout]        2080 │+# @since 2.12
[INFO] [stdout]        2081 │+_comp_complete_service()
[INFO] [stdout]        2082 │+{
[INFO] [stdout]        2083 │+    local cur prev words cword comp_args
[INFO] [stdout]        2084 │+    _comp_initialize -- "$@" || return
[INFO] [stdout]        2085 │+
[INFO] [stdout]        2086 │+    # don't complete past 2nd token
[INFO] [stdout]        2087 │+    ((cword > 2)) && return
[INFO] [stdout]        2088 │+
[INFO] [stdout]        2089 │+    if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then
[INFO] [stdout]        2090 │+        _comp_compgen_services
[INFO] [stdout]        2091 │+        [[ -e /etc/mandrake-release ]] && _comp_compgen_xinetd_services
[INFO] [stdout]        2092 │+    else
[INFO] [stdout]        2093 │+        local sysvdirs
[INFO] [stdout]        2094 │+        _comp_sysvdirs || return 1
[INFO] [stdout]        2095 │+        _comp_compgen_split -l -- "$(command sed -e 'y/|/ /' \
[INFO] [stdout]        2096 │+            -ne 's/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p' \
[INFO] [stdout]        2097 │+            "${sysvdirs[0]}/${prev##*/}" 2>/dev/null) start stop"
[INFO] [stdout]        2098 │+    fi
[INFO] [stdout]        2099 │+} &&
[INFO] [stdout]        2100 │+    complete -F _comp_complete_service service
[INFO] [stdout]        2101 │+
[INFO] [stdout]        2102 │+_comp__init_set_up_service_completions()
[INFO] [stdout]        2103 │+{
[INFO] [stdout]        2104 │+    local sysvdirs svc svcdir svcs
[INFO] [stdout]        2105 │+    _comp_sysvdirs &&
[INFO] [stdout]        2106 │+        for svcdir in "${sysvdirs[@]}"; do
[INFO] [stdout]        2107 │+            if _comp_expand_glob svcs '"$svcdir"/!($_comp_backup_glob)'; then
[INFO] [stdout]        2108 │+                for svc in "${svcs[@]}"; do
[INFO] [stdout]        2109 │+                    [[ -x $svc ]] && complete -F _comp_complete_service "$svc"
[INFO] [stdout]        2110 │+                done
[INFO] [stdout]        2111 │+            fi
[INFO] [stdout]        2112 │+        done
[INFO] [stdout]        2113 │+    unset -f "$FUNCNAME"
[INFO] [stdout]        2114 │+}
[INFO] [stdout]        2115 │+_comp__init_set_up_service_completions
[INFO] [stdout]        2116 │+
[INFO] [stdout]        2117 │+# This function completes on kernel modules
[INFO] [stdout]        2118 │+# @param $1 kernel version
[INFO] [stdout]        2119 │+#
[INFO] [stdout]        2120 │+# @since 2.12
[INFO] [stdout]        2121 │+_comp_compgen_kernel_modules()
[INFO] [stdout]        2122 │+{
[INFO] [stdout]        2123 │+    local _modpath=/lib/modules/$1
[INFO] [stdout]        2124 │+    _comp_compgen_split -- "$(command ls -RL "$_modpath" 2>/dev/null |
[INFO] [stdout]        2125 │+        command sed -ne 's/^\(.*\)\.k\{0,1\}o\(\.[gx]z\)\{0,1\}$/\1/p' \
[INFO] [stdout]        2126 │+            -e 's/^\(.*\)\.ko\.zst$/\1/p')"
[INFO] [stdout]        2127 │+}
[INFO] [stdout]        2128 │+
[INFO] [stdout]        2129 │+# This function completes on inserted kernel modules
[INFO] [stdout]        2130 │+# @param $1 prefix to filter with, default $cur
[INFO] [stdout]        2131 │+#
[INFO] [stdout]        2132 │+# @since 2.12
[INFO] [stdout]        2133 │+_comp_compgen_inserted_kernel_modules()
[INFO] [stdout]        2134 │+{
[INFO] [stdout]        2135 │+    _comp_compgen -c "${1:-$cur}" split -- "$(PATH="$PATH:/sbin" lsmod |
[INFO] [stdout]        2136 │+        _comp_awk '{if (NR != 1) print $1}')"
[INFO] [stdout]        2137 │+}
[INFO] [stdout]        2138 │+
[INFO] [stdout]        2139 │+# This function completes on user or user:group format; as for chown and cpio.
[INFO] [stdout]        2140 │+#
[INFO] [stdout]        2141 │+# The : must be added manually; it will only complete usernames initially.
[INFO] [stdout]        2142 │+# The legacy user.group format is not supported.
[INFO] [stdout]        2143 │+#
[INFO] [stdout]        2144 │+# @param $1  If -u, only return users/groups the user has access to in
[INFO] [stdout]        2145 │+#            context of current completion.
[INFO] [stdout]        2146 │+#
[INFO] [stdout]        2147 │+# @since 2.12
[INFO] [stdout]        2148 │+_comp_compgen_usergroups()
[INFO] [stdout]        2149 │+{
[INFO] [stdout]        2150 │+    if [[ $cur == *\\\\* || $cur == *:*:* ]]; then
[INFO] [stdout]        2151 │+        # Give up early on if something seems horribly wrong.
[INFO] [stdout]        2152 │+        return
[INFO] [stdout]        2153 │+    elif [[ $cur == *\\:* ]]; then
[INFO] [stdout]        2154 │+        # Completing group after 'user\:gr<TAB>'.
[INFO] [stdout]        2155 │+        # Reply with a list of groups prefixed with 'user:', readline will
[INFO] [stdout]        2156 │+        # escape to the colon.
[INFO] [stdout]        2157 │+        local tmp
[INFO] [stdout]        2158 │+        if [[ ${1-} == -u ]]; then
[INFO] [stdout]        2159 │+            _comp_compgen -v tmp -c "${cur#*:}" allowed_groups
[INFO] [stdout]        2160 │+        else
[INFO] [stdout]        2161 │+            _comp_compgen -v tmp -c "${cur#*:}" -- -g
[INFO] [stdout]        2162 │+        fi
[INFO] [stdout]        2163 │+        if ((${#tmp[@]})); then
[INFO] [stdout]        2164 │+            local _prefix=${cur%%*([^:])}
[INFO] [stdout]        2165 │+            _prefix=${_prefix//\\/}
[INFO] [stdout]        2166 │+            _comp_compgen -Rv tmp -- -P "$_prefix" -W '"${tmp[@]}"'
[INFO] [stdout]        2167 │+            _comp_compgen -U tmp set "${tmp[@]}"
[INFO] [stdout]        2168 │+        fi
[INFO] [stdout]        2169 │+    elif [[ $cur == *:* ]]; then
[INFO] [stdout]        2170 │+        # Completing group after 'user:gr<TAB>'.
[INFO] [stdout]        2171 │+        # Reply with a list of unprefixed groups since readline with split on :
[INFO] [stdout]        2172 │+        # and only replace the 'gr' part
[INFO] [stdout]        2173 │+        if [[ ${1-} == -u ]]; then
[INFO] [stdout]        2174 │+            _comp_compgen -c "${cur#*:}" allowed_groups
[INFO] [stdout]        2175 │+        else
[INFO] [stdout]        2176 │+            _comp_compgen -c "${cur#*:}" -- -g
[INFO] [stdout]        2177 │+        fi
[INFO] [stdout]        2178 │+    else
[INFO] [stdout]        2179 │+        # Completing a partial 'usernam<TAB>'.
[INFO] [stdout]        2180 │+        #
[INFO] [stdout]        2181 │+        # Don't suffix with a : because readline will escape it and add a
[INFO] [stdout]        2182 │+        # slash. It's better to complete into 'chown username ' than 'chown
[INFO] [stdout]        2183 │+        # username\:'.
[INFO] [stdout]        2184 │+        if [[ ${1-} == -u ]]; then
[INFO] [stdout]        2185 │+            _comp_compgen_allowed_users
[INFO] [stdout]        2186 │+        else
[INFO] [stdout]        2187 │+            _comp_compgen -- -u
[INFO] [stdout]        2188 │+        fi
[INFO] [stdout]        2189 │+    fi
[INFO] [stdout]        2190 │+}
[INFO] [stdout]        2191 │+
[INFO] [stdout]        2192 │+# @since 2.12
[INFO] [stdout]        2193 │+_comp_compgen_allowed_users()
[INFO] [stdout]        2194 │+{
[INFO] [stdout]        2195 │+    if _comp_as_root; then
[INFO] [stdout]        2196 │+        _comp_compgen -- -u
[INFO] [stdout]        2197 │+    else
[INFO] [stdout]        2198 │+        _comp_compgen_split -- "$(id -un 2>/dev/null || whoami 2>/dev/null)"
[INFO] [stdout]        2199 │+    fi
[INFO] [stdout]        2200 │+}
[INFO] [stdout]        2201 │+
[INFO] [stdout]        2202 │+# @since 2.12
[INFO] [stdout]        2203 │+_comp_compgen_allowed_groups()
[INFO] [stdout]        2204 │+{
[INFO] [stdout]        2205 │+    if _comp_as_root; then
[INFO] [stdout]        2206 │+        _comp_compgen -- -g
[INFO] [stdout]        2207 │+    else
[INFO] [stdout]        2208 │+        _comp_compgen_split -- "$(id -Gn 2>/dev/null || groups 2>/dev/null)"
[INFO] [stdout]        2209 │+    fi
[INFO] [stdout]        2210 │+}
[INFO] [stdout]        2211 │+
[INFO] [stdout]        2212 │+# @since 2.12
[INFO] [stdout]        2213 │+_comp_compgen_selinux_users()
[INFO] [stdout]        2214 │+{
[INFO] [stdout]        2215 │+    _comp_compgen_split -- "$(semanage user -nl 2>/dev/null |
[INFO] [stdout]        2216 │+        _comp_awk '{ print $1 }')"
[INFO] [stdout]        2217 │+}
[INFO] [stdout]        2218 │+
[INFO] [stdout]        2219 │+# This function completes on valid shells
[INFO] [stdout]        2220 │+# @param $1 chroot to search from
[INFO] [stdout]        2221 │+#
[INFO] [stdout]        2222 │+# @since 2.12
[INFO] [stdout]        2223 │+_comp_compgen_shells()
[INFO] [stdout]        2224 │+{
[INFO] [stdout]        2225 │+    local -a shells=()
[INFO] [stdout]        2226 │+    local _shell _rest
[INFO] [stdout]        2227 │+    while read -r _shell _rest; do
[INFO] [stdout]        2228 │+        [[ $_shell == /* ]] && shells+=("$_shell")
[INFO] [stdout]        2229 │+    done 2>/dev/null <"${1-}"/etc/shells
[INFO] [stdout]        2230 │+    _comp_compgen -U shells -- -W '"${shells[@]}"'
[INFO] [stdout]        2231 │+}
[INFO] [stdout]        2232 │+
[INFO] [stdout]        2233 │+# This function completes on valid filesystem types
[INFO] [stdout]        2234 │+#
[INFO] [stdout]        2235 │+# @since 2.12
[INFO] [stdout]        2236 │+_comp_compgen_fstypes()
[INFO] [stdout]        2237 │+{
[INFO] [stdout]        2238 │+    local _fss
[INFO] [stdout]        2239 │+
[INFO] [stdout]        2240 │+    if [[ -e /proc/filesystems ]]; then
[INFO] [stdout]        2241 │+        # Linux
[INFO] [stdout]        2242 │+        _fss="$(cut -d$'\t' -f2 /proc/filesystems)
[INFO] [stdout]        2243 │+             $(_comp_awk '! /\*/ { print $NF }' /etc/filesystems 2>/dev/null)"
[INFO] [stdout]        2244 │+    else
[INFO] [stdout]        2245 │+        # Generic
[INFO] [stdout]        2246 │+        _fss="$(_comp_awk '/^[ \t]*[^#]/ { print $3 }' /etc/fstab 2>/dev/null)
[INFO] [stdout]        2247 │+             $(_comp_awk '/^[ \t]*[^#]/ { print $3 }' /etc/mnttab 2>/dev/null)
[INFO] [stdout]        2248 │+             $(_comp_awk '/^[ \t]*[^#]/ { print $4 }' /etc/vfstab 2>/dev/null)
[INFO] [stdout]        2249 │+             $(_comp_awk '{ print $1 }' /etc/dfs/fstypes 2>/dev/null)
[INFO] [stdout]        2250 │+             $(lsvfs 2>/dev/null | _comp_awk '$1 !~ /^(Filesystem|[^a-zA-Z])/ { print $1 }')
[INFO] [stdout]        2251 │+             $([[ -d /etc/fs ]] && command ls /etc/fs)"
[INFO] [stdout]        2252 │+    fi
[INFO] [stdout]        2253 │+
[INFO] [stdout]        2254 │+    [[ $_fss ]] && _comp_compgen_split -- "$_fss"
[INFO] [stdout]        2255 │+}
[INFO] [stdout]        2256 │+
[INFO] [stdout]        2257 │+# Get absolute path to a file, with rudimentary canonicalization.
[INFO] [stdout]        2258 │+# No symlink resolution or existence checks are done;
[INFO] [stdout]        2259 │+# see `_comp_realcommand` for those.
[INFO] [stdout]        2260 │+# @param $1 The file
[INFO] [stdout]        2261 │+# @var[out] REPLY The path
[INFO] [stdout]        2262 │+# @since 2.12
[INFO] [stdout]        2263 │+_comp_abspath()
[INFO] [stdout]        2264 │+{
[INFO] [stdout]        2265 │+    REPLY=$1
[INFO] [stdout]        2266 │+    [[ $REPLY == /* ]] || REPLY=$PWD/$REPLY
[INFO] [stdout]        2267 │+    REPLY=${REPLY//+(\/)/\/}
[INFO] [stdout]        2268 │+    while true; do
[INFO] [stdout]        2269 │+        # Process "." and "..".  To avoid reducing "/../../ => /", we convert
[INFO] [stdout]        2270 │+        # "/*/../" one by one. "/.."  at the beginning is ignored. Then, /*/../
[INFO] [stdout]        2271 │+        # in the middle is processed.  Finally, /*/.. at the end is removed.
[INFO] [stdout]        2272 │+        case $REPLY in
[INFO] [stdout]        2273 │+            */./*) REPLY=${REPLY//\/.\//\/} ;;
[INFO] [stdout]        2274 │+            */.) REPLY=${REPLY%/.} ;;
[INFO] [stdout]        2275 │+            /..?(/*)) REPLY=${REPLY#/..} ;;
[INFO] [stdout]        2276 │+            */+([^/])/../*) REPLY=${REPLY/\/+([^\/])\/..\//\/} ;;
[INFO] [stdout]        2277 │+            */+([^/])/..) REPLY=${REPLY%/+([^/])/..} ;;
[INFO] [stdout]        2278 │+            *) break ;;
[INFO] [stdout]        2279 │+        esac
[INFO] [stdout]        2280 │+    done
[INFO] [stdout]        2281 │+    [[ $REPLY ]] || REPLY=/
[INFO] [stdout]        2282 │+}
[INFO] [stdout]        2283 │+
[INFO] [stdout]        2284 │+# Get real command.
[INFO] [stdout]        2285 │+# Command is the filename of command in PATH with possible symlinks resolved
[INFO] [stdout]        2286 │+# (if resolve tooling available), empty string if command not found.
[INFO] [stdout]        2287 │+# @param    $1 Command
[INFO] [stdout]        2288 │+# @var[out] REPLY Resulting string
[INFO] [stdout]        2289 │+# @return   True (0) if command found, False (> 0) if not.
[INFO] [stdout]        2290 │+# @since 2.12
[INFO] [stdout]        2291 │+_comp_realcommand()
[INFO] [stdout]        2292 │+{
[INFO] [stdout]        2293 │+    REPLY=""
[INFO] [stdout]        2294 │+    local file
[INFO] [stdout]        2295 │+    file=$(type -P -- "$1") || return $?
[INFO] [stdout]        2296 │+    if type -p realpath >/dev/null; then
[INFO] [stdout]        2297 │+        REPLY=$(realpath "$file")
[INFO] [stdout]        2298 │+    elif type -p greadlink >/dev/null; then
[INFO] [stdout]        2299 │+        REPLY=$(greadlink -f "$file")
[INFO] [stdout]        2300 │+    elif type -p readlink >/dev/null; then
[INFO] [stdout]        2301 │+        REPLY=$(readlink -f "$file")
[INFO] [stdout]        2302 │+    else
[INFO] [stdout]        2303 │+        _comp_abspath "$file"
[INFO] [stdout]        2304 │+    fi
[INFO] [stdout]        2305 │+}
[INFO] [stdout]        2306 │+
[INFO] [stdout]        2307 │+# This function returns the position of the first argument, excluding options
[INFO] [stdout]        2308 │+#
[INFO] [stdout]        2309 │+# Options:
[INFO] [stdout]        2310 │+#     -a GLOB  Pattern of options that take an option argument
[INFO] [stdout]        2311 │+#
[INFO] [stdout]        2312 │+# @var[out] REPLY Position of the first argument before the current one being
[INFO] [stdout]        2313 │+# completed if any, or otherwise an empty string
[INFO] [stdout]        2314 │+# @return True (0) if any argument is found, False (> 0) otherwise.
[INFO] [stdout]        2315 │+# @since 2.12
[INFO] [stdout]        2316 │+_comp_locate_first_arg()
[INFO] [stdout]        2317 │+{
[INFO] [stdout]        2318 │+    local has_optarg=""
[INFO] [stdout]        2319 │+    local OPTIND=1 OPTARG="" OPTERR=0 _opt
[INFO] [stdout]        2320 │+    while getopts ':a:' _opt "$@"; do
[INFO] [stdout]        2321 │+        case $_opt in
[INFO] [stdout]        2322 │+            a) has_optarg=$OPTARG ;;
[INFO] [stdout]        2323 │+            *)
[INFO] [stdout]        2324 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]        2325 │+                return 2
[INFO] [stdout]        2326 │+                ;;
[INFO] [stdout]        2327 │+        esac
[INFO] [stdout]        2328 │+    done
[INFO] [stdout]        2329 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]        2330 │+
[INFO] [stdout]        2331 │+    local i
[INFO] [stdout]        2332 │+    REPLY=
[INFO] [stdout]        2333 │+    for ((i = 1; i < cword; i++)); do
[INFO] [stdout]        2334 │+        # shellcheck disable=SC2053
[INFO] [stdout]        2335 │+        if [[ $has_optarg && ${words[i]} == $has_optarg ]]; then
[INFO] [stdout]        2336 │+            ((i++))
[INFO] [stdout]        2337 │+        elif [[ ${words[i]} != -?* ]]; then
[INFO] [stdout]        2338 │+            REPLY=$i
[INFO] [stdout]        2339 │+            return 0
[INFO] [stdout]        2340 │+        elif [[ ${words[i]} == -- ]]; then
[INFO] [stdout]        2341 │+            ((i + 1 < cword)) && REPLY=$((i + 1)) && return 0
[INFO] [stdout]        2342 │+            break
[INFO] [stdout]        2343 │+        fi
[INFO] [stdout]        2344 │+    done
[INFO] [stdout]        2345 │+    return 1
[INFO] [stdout]        2346 │+}
[INFO] [stdout]        2347 │+
[INFO] [stdout]        2348 │+# This function returns the first argument, excluding options
[INFO] [stdout]        2349 │+#
[INFO] [stdout]        2350 │+# Options:
[INFO] [stdout]        2351 │+#     -a GLOB  Pattern of options that take an option argument
[INFO] [stdout]        2352 │+#
[INFO] [stdout]        2353 │+# @var[out] REPLY First argument before the current one being completed if any,
[INFO] [stdout]        2354 │+# or otherwise an empty string
[INFO] [stdout]        2355 │+# @return True (0) if any argument is found, False (> 0) otherwise.
[INFO] [stdout]        2356 │+# @since 2.12
[INFO] [stdout]        2357 │+_comp_get_first_arg()
[INFO] [stdout]        2358 │+{
[INFO] [stdout]        2359 │+    _comp_locate_first_arg "$@" && REPLY=${words[REPLY]}
[INFO] [stdout]        2360 │+}
[INFO] [stdout]        2361 │+
[INFO] [stdout]        2362 │+# This function counts the number of args, excluding options
[INFO] [stdout]        2363 │+#
[INFO] [stdout]        2364 │+# Options:
[INFO] [stdout]        2365 │+#     -n CHARS  Characters out of $COMP_WORDBREAKS which should
[INFO] [stdout]        2366 │+#               NOT be considered word breaks. See
[INFO] [stdout]        2367 │+#               _comp__reassemble_words.
[INFO] [stdout]        2368 │+#     -a GLOB   Options whose following argument should not be counted
[INFO] [stdout]        2369 │+#     -i GLOB   Options that should be counted as args
[INFO] [stdout]        2370 │+#
[INFO] [stdout]        2371 │+# @var[out] REPLY    Return the number of arguments
[INFO] [stdout]        2372 │+# @since 2.12
[INFO] [stdout]        2373 │+_comp_count_args()
[INFO] [stdout]        2374 │+{
[INFO] [stdout]        2375 │+    local has_optarg="" has_exclude="" exclude="" glob_include=""
[INFO] [stdout]        2376 │+    local OPTIND=1 OPTARG="" OPTERR=0 _opt
[INFO] [stdout]        2377 │+    while getopts ':a:n:i:' _opt "$@"; do
[INFO] [stdout]        2378 │+        case $_opt in
[INFO] [stdout]        2379 │+            a) has_optarg=$OPTARG ;;
[INFO] [stdout]        2380 │+            n) has_exclude=set exclude+=$OPTARG ;;
[INFO] [stdout]        2381 │+            i) glob_include=$OPTARG ;;
[INFO] [stdout]        2382 │+            *)
[INFO] [stdout]        2383 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]        2384 │+                return 2
[INFO] [stdout]        2385 │+                ;;
[INFO] [stdout]        2386 │+        esac
[INFO] [stdout]        2387 │+    done
[INFO] [stdout]        2388 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]        2389 │+
[INFO] [stdout]        2390 │+    if [[ $has_exclude ]]; then
[INFO] [stdout]        2391 │+        local cword words
[INFO] [stdout]        2392 │+        _comp__reassemble_words "$exclude<>&" words cword
[INFO] [stdout]        2393 │+    fi
[INFO] [stdout]        2394 │+
[INFO] [stdout]        2395 │+    local i
[INFO] [stdout]        2396 │+    REPLY=1
[INFO] [stdout]        2397 │+    for ((i = 1; i < cword; i++)); do
[INFO] [stdout]        2398 │+        # shellcheck disable=SC2053
[INFO] [stdout]        2399 │+        if [[ $has_optarg && ${words[i]} == $has_optarg ]]; then
[INFO] [stdout]        2400 │+            ((i++))
[INFO] [stdout]        2401 │+        elif [[ ${words[i]} != -?* || $glob_include && ${words[i]} == $glob_include ]]; then
[INFO] [stdout]        2402 │+            ((REPLY++))
[INFO] [stdout]        2403 │+        elif [[ ${words[i]} == -- ]]; then
[INFO] [stdout]        2404 │+            ((REPLY += cword - i - 1))
[INFO] [stdout]        2405 │+            break
[INFO] [stdout]        2406 │+        fi
[INFO] [stdout]        2407 │+    done
[INFO] [stdout]        2408 │+}
[INFO] [stdout]        2409 │+
[INFO] [stdout]        2410 │+# This function completes on PCI IDs
[INFO] [stdout]        2411 │+#
[INFO] [stdout]        2412 │+# @since 2.12
[INFO] [stdout]        2413 │+_comp_compgen_pci_ids()
[INFO] [stdout]        2414 │+{
[INFO] [stdout]        2415 │+    _comp_compgen_split -- "$(PATH="$PATH:/sbin" lspci -n | _comp_awk '{print $3}')"
[INFO] [stdout]        2416 │+}
[INFO] [stdout]        2417 │+
[INFO] [stdout]        2418 │+# This function completes on USB IDs
[INFO] [stdout]        2419 │+#
[INFO] [stdout]        2420 │+# @since 2.12
[INFO] [stdout]        2421 │+_comp_compgen_usb_ids()
[INFO] [stdout]        2422 │+{
[INFO] [stdout]        2423 │+    _comp_compgen_split -- "$(PATH="$PATH:/sbin" lsusb | _comp_awk '{print $6}')"
[INFO] [stdout]        2424 │+}
[INFO] [stdout]        2425 │+
[INFO] [stdout]        2426 │+# CD device names
[INFO] [stdout]        2427 │+#
[INFO] [stdout]        2428 │+# @since 2.12
[INFO] [stdout]        2429 │+_comp_compgen_cd_devices()
[INFO] [stdout]        2430 │+{
[INFO] [stdout]        2431 │+    _comp_compgen -c "${cur:-/dev/}" -- -f -d -X "!*/?([amrs])cd!(c-*)"
[INFO] [stdout]        2432 │+}
[INFO] [stdout]        2433 │+
[INFO] [stdout]        2434 │+# DVD device names
[INFO] [stdout]        2435 │+#
[INFO] [stdout]        2436 │+# @since 2.12
[INFO] [stdout]        2437 │+_comp_compgen_dvd_devices()
[INFO] [stdout]        2438 │+{
[INFO] [stdout]        2439 │+    _comp_compgen -c "${cur:-/dev/}" -- -f -d -X "!*/?(r)dvd*"
[INFO] [stdout]        2440 │+}
[INFO] [stdout]        2441 │+
[INFO] [stdout]        2442 │+# TERM environment variable values
[INFO] [stdout]        2443 │+#
[INFO] [stdout]        2444 │+# @since 2.12
[INFO] [stdout]        2445 │+_comp_compgen_terms()
[INFO] [stdout]        2446 │+{
[INFO] [stdout]        2447 │+    _comp_compgen_split -- "$({
[INFO] [stdout]        2448 │+        command sed -ne 's/^\([^[:space:]#|]\{2,\}\)|.*/\1/p' /etc/termcap
[INFO] [stdout]        2449 │+        {
[INFO] [stdout]        2450 │+            toe -a || toe
[INFO] [stdout]        2451 │+        } | _comp_awk '{ print $1 }'
[INFO] [stdout]        2452 │+        _comp_expand_glob dirs '/{etc,lib,usr/lib,usr/share}/terminfo/?' &&
[INFO] [stdout]        2453 │+            find "${dirs[@]}" -type f -maxdepth 1 |
[INFO] [stdout]        2454 │+            _comp_awk -F / '{ print $NF }'
[INFO] [stdout]        2455 │+    } 2>/dev/null)"
[INFO] [stdout]        2456 │+}
[INFO] [stdout]        2457 │+
[INFO] [stdout]        2458 │+# @since 2.12
[INFO] [stdout]        2459 │+_comp_try_faketty()
[INFO] [stdout]        2460 │+{
[INFO] [stdout]        2461 │+    if type unbuffer &>/dev/null; then
[INFO] [stdout]        2462 │+        unbuffer -p "$@"
[INFO] [stdout]        2463 │+    elif script --version 2>&1 | command grep -qF util-linux; then
[INFO] [stdout]        2464 │+        # BSD and Solaris "script" do not seem to have required features
[INFO] [stdout]        2465 │+        script -qaefc "$*" /dev/null
[INFO] [stdout]        2466 │+    else
[INFO] [stdout]        2467 │+        "$@" # no can do, fallback
[INFO] [stdout]        2468 │+    fi
[INFO] [stdout]        2469 │+}
[INFO] [stdout]        2470 │+
[INFO] [stdout]        2471 │+# a little help for FreeBSD ports users
[INFO] [stdout]        2472 │+[[ $OSTYPE == *freebsd* ]] && complete -W 'index search fetch fetch-list
[INFO] [stdout]        2473 │+    extract patch configure build install reinstall deinstall clean
[INFO] [stdout]        2474 │+    clean-depends kernel buildworld' make
[INFO] [stdout]        2475 │+
[INFO] [stdout]        2476 │+# This function provides simple user@host completion
[INFO] [stdout]        2477 │+#
[INFO] [stdout]        2478 │+# @since 2.12
[INFO] [stdout]        2479 │+_comp_complete_user_at_host()
[INFO] [stdout]        2480 │+{
[INFO] [stdout]        2481 │+    local cur prev words cword comp_args
[INFO] [stdout]        2482 │+    _comp_initialize -n : -- "$@" || return
[INFO] [stdout]        2483 │+
[INFO] [stdout]        2484 │+    if [[ $cur == *@* ]]; then
[INFO] [stdout]        2485 │+        _comp_compgen_known_hosts "$cur"
[INFO] [stdout]        2486 │+    else
[INFO] [stdout]        2487 │+        _comp_compgen -- -u -S @
[INFO] [stdout]        2488 │+        compopt -o nospace
[INFO] [stdout]        2489 │+    fi
[INFO] [stdout]        2490 │+}
[INFO] [stdout]        2491 │+shopt -u hostcomplete && complete -F _comp_complete_user_at_host talk ytalk finger
[INFO] [stdout]        2492 │+
[INFO] [stdout]        2493 │+# NOTE: Using this function as a helper function is deprecated.  Use
[INFO] [stdout]        2494 │+#       `_comp_compgen_known_hosts' instead.
[INFO] [stdout]        2495 │+# @since 2.12
[INFO] [stdout]        2496 │+_comp_complete_known_hosts()
[INFO] [stdout]        2497 │+{
[INFO] [stdout]        2498 │+    local cur prev words cword comp_args
[INFO] [stdout]        2499 │+    _comp_initialize -n : -- "$@" || return
[INFO] [stdout]        2500 │+
[INFO] [stdout]        2501 │+    # NOTE: Using `_known_hosts' (the old name of `_comp_complete_known_hosts')
[INFO] [stdout]        2502 │+    #       as a helper function and passing options to `_known_hosts' is
[INFO] [stdout]        2503 │+    #       deprecated: Use `_comp_compgen_known_hosts' instead.
[INFO] [stdout]        2504 │+    local -a options=()
[INFO] [stdout]        2505 │+    [[ ${1-} == -a || ${2-} == -a ]] && options+=(-a)
[INFO] [stdout]        2506 │+    [[ ${1-} == -c || ${2-} == -c ]] && options+=(-c)
[INFO] [stdout]        2507 │+    local IFS=$' \t\n' # Workaround for connected ${v+"$@"} in bash < 4.4
[INFO] [stdout]        2508 │+    _comp_compgen_known_hosts ${options[@]+"${options[@]}"} -- "$cur"
[INFO] [stdout]        2509 │+}
[INFO] [stdout]        2510 │+
[INFO] [stdout]        2511 │+# Helper function to locate ssh included files in configs
[INFO] [stdout]        2512 │+# This function looks for the "Include" keyword in ssh config files and
[INFO] [stdout]        2513 │+# includes them recursively, adding each result to the config variable.
[INFO] [stdout]        2514 │+_comp__included_ssh_config_files()
[INFO] [stdout]        2515 │+{
[INFO] [stdout]        2516 │+    (($# < 1)) &&
[INFO] [stdout]        2517 │+        echo "bash_completion: $FUNCNAME: missing mandatory argument CONFIG" >&2
[INFO] [stdout]        2518 │+    local configfile i files f REPLY
[INFO] [stdout]        2519 │+    configfile=$1
[INFO] [stdout]        2520 │+
[INFO] [stdout]        2521 │+    # From man ssh_config:
[INFO] [stdout]        2522 │+    # "Files without absolute paths are assumed to be in ~/.ssh if included
[INFO] [stdout]        2523 │+    # in a user configuration file or /etc/ssh if included from the system
[INFO] [stdout]        2524 │+    # configuration file."
[INFO] [stdout]        2525 │+    # This behavior is not affected by the the including file location -
[INFO] [stdout]        2526 │+    # if the system configuration file is included from the user's config,
[INFO] [stdout]        2527 │+    # relative includes are still resolved in the user's ssh config directory.
[INFO] [stdout]        2528 │+    local relative_include_base
[INFO] [stdout]        2529 │+    if [[ $configfile == /etc/ssh* ]]; then
[INFO] [stdout]        2530 │+        relative_include_base="/etc/ssh"
[INFO] [stdout]        2531 │+    else
[INFO] [stdout]        2532 │+        relative_include_base="$HOME/.ssh"
[INFO] [stdout]        2533 │+    fi
[INFO] [stdout]        2534 │+
[INFO] [stdout]        2535 │+    local depth=1
[INFO] [stdout]        2536 │+    local -a included
[INFO] [stdout]        2537 │+    local -a include_files
[INFO] [stdout]        2538 │+    included=("$configfile")
[INFO] [stdout]        2539 │+
[INFO] [stdout]        2540 │+    # Max recursion depth per openssh's READCONF_MAX_DEPTH:
[INFO] [stdout]        2541 │+    # https://github.com/openssh/openssh-portable/blob/5ec5504f1d328d5bfa64280cd617c3efec4f78f3/readconf.c#L2240
[INFO] [stdout]        2542 │+    local max_depth=16
[INFO] [stdout]        2543 │+    while ((${#included[@]} > 0 && depth++ < max_depth)); do
[INFO] [stdout]        2544 │+        _comp_split include_files "$(command sed -ne 's/^[[:blank:]]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]\(.*\)$/\1/p' "${included[@]}")" || return
[INFO] [stdout]        2545 │+        included=()
[INFO] [stdout]        2546 │+        for i in "${include_files[@]}"; do
[INFO] [stdout]        2547 │+            if [[ $i != [~/]* ]]; then
[INFO] [stdout]        2548 │+                i="${relative_include_base}/${i}"
[INFO] [stdout]        2549 │+            fi
[INFO] [stdout]        2550 │+            _comp_expand_tilde "$i"
[INFO] [stdout]        2551 │+            if _comp_expand_glob files '$REPLY'; then
[INFO] [stdout]        2552 │+                # In case the expanded variable contains multiple paths
[INFO] [stdout]        2553 │+                for f in "${files[@]}"; do
[INFO] [stdout]        2554 │+                    if [[ -r $f && ! -d $f ]]; then
[INFO] [stdout]        2555 │+                        config+=("$f")
[INFO] [stdout]        2556 │+                        included+=("$f")
[INFO] [stdout]        2557 │+                    fi
[INFO] [stdout]        2558 │+                done
[INFO] [stdout]        2559 │+            fi
[INFO] [stdout]        2560 │+        done
[INFO] [stdout]        2561 │+    done
[INFO] [stdout]        2562 │+}
[INFO] [stdout]        2563 │+
[INFO] [stdout]        2564 │+# Helper function for completing _comp_complete_known_hosts.
[INFO] [stdout]        2565 │+# This function performs host completion based on ssh's config and known_hosts
[INFO] [stdout]        2566 │+# files, as well as hostnames reported by avahi-browse if
[INFO] [stdout]        2567 │+# BASH_COMPLETION_KNOWN_HOSTS_WITH_AVAHI is set to a non-empty value.
[INFO] [stdout]        2568 │+# Also hosts from HOSTFILE (compgen -A hostname) are added, unless
[INFO] [stdout]        2569 │+# BASH_COMPLETION_KNOWN_HOSTS_WITH_HOSTFILE is set to an empty value.
[INFO] [stdout]        2570 │+# Usage: _comp_compgen_known_hosts [OPTIONS] CWORD
[INFO] [stdout]        2571 │+# Options:
[INFO] [stdout]        2572 │+#     -a             Use aliases from ssh config files
[INFO] [stdout]        2573 │+#     -c             Use `:' suffix
[INFO] [stdout]        2574 │+#     -F configfile  Use `configfile' for configuration settings
[INFO] [stdout]        2575 │+#     -p PREFIX      Use PREFIX
[INFO] [stdout]        2576 │+#     -4             Filter IPv6 addresses from results
[INFO] [stdout]        2577 │+#     -6             Filter IPv4 addresses from results
[INFO] [stdout]        2578 │+# @var[out] COMPREPLY  Completions, starting with CWORD, are added
[INFO] [stdout]        2579 │+# @return True (0) if one or more completions are generated, or otherwise False
[INFO] [stdout]        2580 │+# (1).
[INFO] [stdout]        2581 │+# @since 2.12
[INFO] [stdout]        2582 │+_comp_compgen_known_hosts()
[INFO] [stdout]        2583 │+{
[INFO] [stdout]        2584 │+    local known_hosts
[INFO] [stdout]        2585 │+    _comp_compgen_known_hosts__impl "$@" || return "$?"
[INFO] [stdout]        2586 │+    _comp_compgen -U known_hosts set "${known_hosts[@]}"
[INFO] [stdout]        2587 │+}
[INFO] [stdout]        2588 │+_comp_compgen_known_hosts__impl()
[INFO] [stdout]        2589 │+{
[INFO] [stdout]        2590 │+    known_hosts=()
[INFO] [stdout]        2591 │+
[INFO] [stdout]        2592 │+    local configfile="" flag prefix=""
[INFO] [stdout]        2593 │+    local cur suffix="" aliases="" i host ipv4="" ipv6=""
[INFO] [stdout]        2594 │+    local -a kh tmpkh=() khd=() config=()
[INFO] [stdout]        2595 │+
[INFO] [stdout]        2596 │+    # TODO remove trailing %foo from entries
[INFO] [stdout]        2597 │+
[INFO] [stdout]        2598 │+    local OPTIND=1
[INFO] [stdout]        2599 │+    while getopts "ac46F:p:" flag "$@"; do
[INFO] [stdout]        2600 │+        case $flag in
[INFO] [stdout]        2601 │+            a) aliases=set ;;
[INFO] [stdout]        2602 │+            c) suffix=':' ;;
[INFO] [stdout]        2603 │+            F)
[INFO] [stdout]        2604 │+                if [[ ! $OPTARG ]]; then
[INFO] [stdout]        2605 │+                    echo "bash_completion: $FUNCNAME: -F: an empty filename is specified" >&2
[INFO] [stdout]        2606 │+                    return 2
[INFO] [stdout]        2607 │+                fi
[INFO] [stdout]        2608 │+                configfile=$OPTARG
[INFO] [stdout]        2609 │+                ;;
[INFO] [stdout]        2610 │+            p) prefix=$OPTARG ;;
[INFO] [stdout]        2611 │+            4) ipv4=set ;;
[INFO] [stdout]        2612 │+            6) ipv6=set ;;
[INFO] [stdout]        2613 │+            *)
[INFO] [stdout]        2614 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]        2615 │+                return 2
[INFO] [stdout]        2616 │+                ;;
[INFO] [stdout]        2617 │+        esac
[INFO] [stdout]        2618 │+    done
[INFO] [stdout]        2619 │+    if (($# < OPTIND)); then
[INFO] [stdout]        2620 │+        echo "bash_completion: $FUNCNAME: missing mandatory argument CWORD" >&2
[INFO] [stdout]        2621 │+        return 2
[INFO] [stdout]        2622 │+    fi
[INFO] [stdout]        2623 │+    cur=${!OPTIND}
[INFO] [stdout]        2624 │+    ((OPTIND += 1))
[INFO] [stdout]        2625 │+    if (($# >= OPTIND)); then
[INFO] [stdout]        2626 │+        echo "bash_completion: $FUNCNAME($*): unprocessed arguments:" \
[INFO] [stdout]        2627 │+            "$(while (($# >= OPTIND)); do
[INFO] [stdout]        2628 │+                printf '%s ' ${!OPTIND}
[INFO] [stdout]        2629 │+                shift
[INFO] [stdout]        2630 │+            done)" >&2
[INFO] [stdout]        2631 │+        return 2
[INFO] [stdout]        2632 │+    fi
[INFO] [stdout]        2633 │+
[INFO] [stdout]        2634 │+    [[ $cur == *@* ]] && prefix=$prefix${cur%@*}@ && cur=${cur#*@}
[INFO] [stdout]        2635 │+    kh=()
[INFO] [stdout]        2636 │+
[INFO] [stdout]        2637 │+    # ssh config files
[INFO] [stdout]        2638 │+    if [[ $configfile ]]; then
[INFO] [stdout]        2639 │+        [[ -r $configfile && ! -d $configfile ]] && config+=("$configfile")
[INFO] [stdout]        2640 │+    else
[INFO] [stdout]        2641 │+        for i in /etc/ssh/ssh_config ~/.ssh/config ~/.ssh2/config; do
[INFO] [stdout]        2642 │+            [[ -r $i && ! -d $i ]] && config+=("$i")
[INFO] [stdout]        2643 │+        done
[INFO] [stdout]        2644 │+    fi
[INFO] [stdout]        2645 │+
[INFO] [stdout]        2646 │+    # "Include" keyword in ssh config files
[INFO] [stdout]        2647 │+    if ((${#config[@]} > 0)); then
[INFO] [stdout]        2648 │+        for i in "${config[@]}"; do
[INFO] [stdout]        2649 │+            _comp__included_ssh_config_files "$i"
[INFO] [stdout]        2650 │+        done
[INFO] [stdout]        2651 │+    fi
[INFO] [stdout]        2652 │+
[INFO] [stdout]        2653 │+    # Known hosts files from configs
[INFO] [stdout]        2654 │+    if ((${#config[@]} > 0)); then
[INFO] [stdout]        2655 │+        # expand paths (if present) to global and user known hosts files
[INFO] [stdout]        2656 │+        # TODO(?): try to make known hosts files with more than one consecutive
[INFO] [stdout]        2657 │+        #          spaces in their name work (watch out for ~ expansion
[INFO] [stdout]        2658 │+        #          breakage! Alioth#311595)
[INFO] [stdout]        2659 │+        if _comp_split -l tmpkh "$(_comp_awk 'sub("^[ \t]*([Gg][Ll][Oo][Bb][Aa][Ll]|[Uu][Ss][Ee][Rr])[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee][ \t=]+", "") { print $0 }' "${config[@]}" | sort -u)"; then
[INFO] [stdout]        2660 │+            local tmpkh2 j REPLY
[INFO] [stdout]        2661 │+            for i in "${tmpkh[@]}"; do
[INFO] [stdout]        2662 │+                # First deal with quoted entries...
[INFO] [stdout]        2663 │+                while [[ $i =~ ^([^\"]*)\"([^\"]*)\"(.*)$ ]]; do
[INFO] [stdout]        2664 │+                    i=${BASH_REMATCH[1]}${BASH_REMATCH[3]}
[INFO] [stdout]        2665 │+                    _comp_expand_tilde "${BASH_REMATCH[2]}" # Eval/expand possible `~' or `~user'
[INFO] [stdout]        2666 │+                    [[ -r $REPLY ]] && kh+=("$REPLY")
[INFO] [stdout]        2667 │+                done
[INFO] [stdout]        2668 │+                # ...and then the rest.
[INFO] [stdout]        2669 │+                _comp_split tmpkh2 "$i" || continue
[INFO] [stdout]        2670 │+                for j in "${tmpkh2[@]}"; do
[INFO] [stdout]        2671 │+                    _comp_expand_tilde "$j" # Eval/expand possible `~' or `~user'
[INFO] [stdout]        2672 │+                    [[ -r $REPLY ]] && kh+=("$REPLY")
[INFO] [stdout]        2673 │+                done
[INFO] [stdout]        2674 │+            done
[INFO] [stdout]        2675 │+        fi
[INFO] [stdout]        2676 │+    fi
[INFO] [stdout]        2677 │+
[INFO] [stdout]        2678 │+    if [[ ! $configfile ]]; then
[INFO] [stdout]        2679 │+        # Global and user known_hosts files
[INFO] [stdout]        2680 │+        for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 \
[INFO] [stdout]        2681 │+            /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts \
[INFO] [stdout]        2682 │+            ~/.ssh/known_hosts2; do
[INFO] [stdout]        2683 │+            [[ -r $i && ! -d $i ]] && kh+=("$i")
[INFO] [stdout]        2684 │+        done
[INFO] [stdout]        2685 │+        for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys; do
[INFO] [stdout]        2686 │+            [[ -d $i ]] || continue
[INFO] [stdout]        2687 │+            _comp_expand_glob tmpkh '"$i"/*.pub' && khd+=("${tmpkh[@]}")
[INFO] [stdout]        2688 │+        done
[INFO] [stdout]        2689 │+    fi
[INFO] [stdout]        2690 │+
[INFO] [stdout]        2691 │+    # If we have known_hosts files to use
[INFO] [stdout]        2692 │+    if ((${#kh[@]} + ${#khd[@]} > 0)); then
[INFO] [stdout]        2693 │+        if ((${#kh[@]} > 0)); then
[INFO] [stdout]        2694 │+            # https://man.openbsd.org/sshd.8#SSH_KNOWN_HOSTS_FILE_FORMAT
[INFO] [stdout]        2695 │+            for i in "${kh[@]}"; do
[INFO] [stdout]        2696 │+                while read -ra tmpkh; do
[INFO] [stdout]        2697 │+                    ((${#tmpkh[@]} == 0)) && continue
[INFO] [stdout]        2698 │+                    # Skip entries starting with | (hashed) and # (comment)
[INFO] [stdout]        2699 │+                    [[ ${tmpkh[0]} == [\|\#]* ]] && continue
[INFO] [stdout]        2700 │+                    # Ignore leading @foo (markers)
[INFO] [stdout]        2701 │+                    local host_list=${tmpkh[0]}
[INFO] [stdout]        2702 │+                    [[ ${tmpkh[0]} == @* ]] && host_list=${tmpkh[1]-}
[INFO] [stdout]        2703 │+                    # Split entry on commas
[INFO] [stdout]        2704 │+                    local -a hosts
[INFO] [stdout]        2705 │+                    if _comp_split -F , hosts "$host_list"; then
[INFO] [stdout]        2706 │+                        for host in "${hosts[@]}"; do
[INFO] [stdout]        2707 │+                            # Skip hosts containing wildcards
[INFO] [stdout]        2708 │+                            [[ $host == *[*?]* ]] && continue
[INFO] [stdout]        2709 │+                            # Remove leading [
[INFO] [stdout]        2710 │+                            host=${host#[}
[INFO] [stdout]        2711 │+                            # Remove trailing ] + optional :port
[INFO] [stdout]        2712 │+                            host=${host%]?(:+([0-9]))}
[INFO] [stdout]        2713 │+                            # Add host to candidates
[INFO] [stdout]        2714 │+                            [[ $host ]] && known_hosts+=("$host")
[INFO] [stdout]        2715 │+                        done
[INFO] [stdout]        2716 │+                    fi
[INFO] [stdout]        2717 │+                done <"$i"
[INFO] [stdout]        2718 │+            done
[INFO] [stdout]        2719 │+        fi
[INFO] [stdout]        2720 │+        if ((${#khd[@]} > 0)); then
[INFO] [stdout]        2721 │+            # Needs to look for files called
[INFO] [stdout]        2722 │+            # .../.ssh2/key_22_<hostname>.pub
[INFO] [stdout]        2723 │+            # dont fork any processes, because in a cluster environment,
[INFO] [stdout]        2724 │+            # there can be hundreds of hostkeys
[INFO] [stdout]        2725 │+            for i in "${khd[@]}"; do
[INFO] [stdout]        2726 │+                if [[ $i == *key_22_*.pub && -r $i ]]; then
[INFO] [stdout]        2727 │+                    host=${i/#*key_22_/}
[INFO] [stdout]        2728 │+                    host=${host/%.pub/}
[INFO] [stdout]        2729 │+                    [[ $host ]] && known_hosts+=("$host")
[INFO] [stdout]        2730 │+                fi
[INFO] [stdout]        2731 │+            done
[INFO] [stdout]        2732 │+        fi
[INFO] [stdout]        2733 │+
[INFO] [stdout]        2734 │+        # apply suffix and prefix
[INFO] [stdout]        2735 │+        ((${#known_hosts[@]})) &&
[INFO] [stdout]        2736 │+            _comp_compgen -v known_hosts -- -W '"${known_hosts[@]}"' -P "$prefix" -S "$suffix"
[INFO] [stdout]        2737 │+    fi
[INFO] [stdout]        2738 │+
[INFO] [stdout]        2739 │+    # append any available aliases from ssh config files
[INFO] [stdout]        2740 │+    if [[ ${#config[@]} -gt 0 && $aliases ]]; then
[INFO] [stdout]        2741 │+        local -a hosts
[INFO] [stdout]        2742 │+        if _comp_split hosts "$(command sed -ne 's/^[[:blank:]]*[Hh][Oo][Ss][Tt][[:blank:]=]\{1,\}\(.*\)$/\1/p' "${config[@]}")"; then
[INFO] [stdout]        2743 │+            _comp_compgen -av known_hosts -- -P "$prefix" \
[INFO] [stdout]        2744 │+                -S "$suffix" -W '"${hosts[@]%%[*?%]*}"' -X '@(\!*|)'
[INFO] [stdout]        2745 │+        fi
[INFO] [stdout]        2746 │+    fi
[INFO] [stdout]        2747 │+
[INFO] [stdout]        2748 │+    # Add hosts reported by avahi-browse, if desired and it's available.
[INFO] [stdout]        2749 │+    if [[ ${BASH_COMPLETION_KNOWN_HOSTS_WITH_AVAHI-} ]] &&
[INFO] [stdout]        2750 │+        type avahi-browse &>/dev/null; then
[INFO] [stdout]        2751 │+        # Some old versions of avahi-browse reportedly didn't have -k
[INFO] [stdout]        2752 │+        # (even if mentioned in the manpage); those we do not support any more.
[INFO] [stdout]        2753 │+        local generated=$(avahi-browse -cprak 2>/dev/null | _comp_awk -F ';' \
[INFO] [stdout]        2754 │+            '/^=/ && $5 ~ /^_(ssh|workstation)\._tcp$/ { print $7 }' |
[INFO] [stdout]        2755 │+            sort -u)
[INFO] [stdout]        2756 │+        _comp_compgen -av known_hosts -- -P "$prefix" -S "$suffix" -W '$generated'
[INFO] [stdout]        2757 │+    fi
[INFO] [stdout]        2758 │+
[INFO] [stdout]        2759 │+    # Add hosts reported by ruptime.
[INFO] [stdout]        2760 │+    if type ruptime &>/dev/null; then
[INFO] [stdout]        2761 │+        local generated=$(ruptime 2>/dev/null | _comp_awk '!/^ruptime:/ { print $1 }')
[INFO] [stdout]        2762 │+        _comp_compgen -av known_hosts -- -W '$generated'
[INFO] [stdout]        2763 │+    fi
[INFO] [stdout]        2764 │+
[INFO] [stdout]        2765 │+    # Add results of normal hostname completion, unless
[INFO] [stdout]        2766 │+    # `BASH_COMPLETION_KNOWN_HOSTS_WITH_HOSTFILE' is set to an empty value.
[INFO] [stdout]        2767 │+    if [[ ${BASH_COMPLETION_KNOWN_HOSTS_WITH_HOSTFILE-set} ]]; then
[INFO] [stdout]        2768 │+        _comp_compgen -av known_hosts -- -A hostname -P "$prefix" -S "$suffix"
[INFO] [stdout]        2769 │+    fi
[INFO] [stdout]        2770 │+
[INFO] [stdout]        2771 │+    ((${#known_hosts[@]})) || return 1
[INFO] [stdout]        2772 │+
[INFO] [stdout]        2773 │+    if [[ $ipv4 ]]; then
[INFO] [stdout]        2774 │+        known_hosts=("${known_hosts[@]/*:*$suffix/}")
[INFO] [stdout]        2775 │+    fi
[INFO] [stdout]        2776 │+    if [[ $ipv6 ]]; then
[INFO] [stdout]        2777 │+        known_hosts=("${known_hosts[@]/+([0-9]).+([0-9]).+([0-9]).+([0-9])$suffix/}")
[INFO] [stdout]        2778 │+    fi
[INFO] [stdout]        2779 │+    if [[ $ipv4 || $ipv6 ]]; then
[INFO] [stdout]        2780 │+        for i in "${!known_hosts[@]}"; do
[INFO] [stdout]        2781 │+            [[ ${known_hosts[i]} ]] || unset -v 'known_hosts[i]'
[INFO] [stdout]        2782 │+        done
[INFO] [stdout]        2783 │+    fi
[INFO] [stdout]        2784 │+    ((${#known_hosts[@]})) || return 1
[INFO] [stdout]        2785 │+
[INFO] [stdout]        2786 │+    _comp_compgen -v known_hosts -c "$prefix$cur" ltrim_colon "${known_hosts[@]}"
[INFO] [stdout]        2787 │+}
[INFO] [stdout]        2788 │+complete -F _comp_complete_known_hosts traceroute traceroute6 \
[INFO] [stdout]        2789 │+    fping fping6 telnet rsh rlogin ftp dig drill ssh-installkeys showmount
[INFO] [stdout]        2790 │+
[INFO] [stdout]        2791 │+# Convert the word index in `words` to the index in `COMP_WORDS`.
[INFO] [stdout]        2792 │+# @param $1           Index in the array WORDS.
[INFO] [stdout]        2793 │+# @var[in,opt] words  Words that contain reassmbled words.
[INFO] [stdout]        2794 │+# @var[in,opt] cword  Current word index in WORDS.
[INFO] [stdout]        2795 │+#                     WORDS and CWORD, if any, are expected to be created by
[INFO] [stdout]        2796 │+#                     _comp__reassemble_words.
[INFO] [stdout]        2797 │+#
[INFO] [stdout]        2798 │+_comp__find_original_word()
[INFO] [stdout]        2799 │+{
[INFO] [stdout]        2800 │+    REPLY=$1
[INFO] [stdout]        2801 │+
[INFO] [stdout]        2802 │+    # If CWORD or WORDS are undefined, we return the first argument without any
[INFO] [stdout]        2803 │+    # processing.
[INFO] [stdout]        2804 │+    [[ -v cword && -v words ]] || return 0
[INFO] [stdout]        2805 │+
[INFO] [stdout]        2806 │+    local reassembled_offset=$1 i=0 j
[INFO] [stdout]        2807 │+    for ((j = 0; j < reassembled_offset; j++)); do
[INFO] [stdout]        2808 │+        local word=${words[j]}
[INFO] [stdout]        2809 │+        while [[ $word && i -lt ${#COMP_WORDS[@]} && $word == *"${COMP_WORDS[i]}"* ]]; do
[INFO] [stdout]        2810 │+            word=${word#*"${COMP_WORDS[i++]}"}
[INFO] [stdout]        2811 │+        done
[INFO] [stdout]        2812 │+    done
[INFO] [stdout]        2813 │+    REPLY=$i
[INFO] [stdout]        2814 │+}
[INFO] [stdout]        2815 │+# A meta-command completion function for commands like sudo(8), which need to
[INFO] [stdout]        2816 │+# first complete on a command, then complete according to that command's own
[INFO] [stdout]        2817 │+# completion definition.
[INFO] [stdout]        2818 │+#
[INFO] [stdout]        2819 │+# @since 2.12
[INFO] [stdout]        2820 │+_comp_command_offset()
[INFO] [stdout]        2821 │+{
[INFO] [stdout]        2822 │+    # rewrite current completion context before invoking
[INFO] [stdout]        2823 │+    # actual command completion
[INFO] [stdout]        2824 │+
[INFO] [stdout]        2825 │+    # obtain the word index in COMP_WORDS
[INFO] [stdout]        2826 │+    local REPLY
[INFO] [stdout]        2827 │+    _comp__find_original_word "$1"
[INFO] [stdout]        2828 │+    local word_offset=$REPLY
[INFO] [stdout]        2829 │+
[INFO] [stdout]        2830 │+    # make changes to COMP_* local.  Note that bash-4.3..5.0 have a
[INFO] [stdout]        2831 │+    # bug that `local -a arr=("${arr[@]}")` fails.  We instead first
[INFO] [stdout]        2832 │+    # assign the values of `COMP_WORDS` to another array `comp_words`.
[INFO] [stdout]        2833 │+    local COMP_LINE=$COMP_LINE COMP_POINT=$COMP_POINT COMP_CWORD=$COMP_CWORD
[INFO] [stdout]        2834 │+    local -a comp_words=("${COMP_WORDS[@]}")
[INFO] [stdout]        2835 │+    local -a COMP_WORDS=("${comp_words[@]}")
[INFO] [stdout]        2836 │+
[INFO] [stdout]        2837 │+    # find new first word position, then
[INFO] [stdout]        2838 │+    # rewrite COMP_LINE and adjust COMP_POINT
[INFO] [stdout]        2839 │+    local i tail
[INFO] [stdout]        2840 │+    for ((i = 0; i < word_offset; i++)); do
[INFO] [stdout]        2841 │+        tail=${COMP_LINE#*"${COMP_WORDS[i]}"}
[INFO] [stdout]        2842 │+        ((COMP_POINT -= ${#COMP_LINE} - ${#tail}))
[INFO] [stdout]        2843 │+        COMP_LINE=$tail
[INFO] [stdout]        2844 │+    done
[INFO] [stdout]        2845 │+
[INFO] [stdout]        2846 │+    # shift COMP_WORDS elements and adjust COMP_CWORD
[INFO] [stdout]        2847 │+    COMP_WORDS=("${COMP_WORDS[@]:word_offset}")
[INFO] [stdout]        2848 │+    ((COMP_CWORD -= word_offset))
[INFO] [stdout]        2849 │+
[INFO] [stdout]        2850 │+    COMPREPLY=()
[INFO] [stdout]        2851 │+    local cur
[INFO] [stdout]        2852 │+    _comp_get_words cur
[INFO] [stdout]        2853 │+
[INFO] [stdout]        2854 │+    if ((COMP_CWORD == 0)); then
[INFO] [stdout]        2855 │+        _comp_compgen_commands
[INFO] [stdout]        2856 │+    else
[INFO] [stdout]        2857 │+        _comp_dequote "${COMP_WORDS[0]}" || REPLY=${COMP_WORDS[0]}
[INFO] [stdout]        2858 │+        local cmd=$REPLY compcmd=$REPLY
[INFO] [stdout]        2859 │+        local cspec=$(complete -p -- "$cmd" 2>/dev/null)
[INFO] [stdout]        2860 │+
[INFO] [stdout]        2861 │+        # If we have no completion for $cmd yet, see if we have for basename
[INFO] [stdout]        2862 │+        if [[ ! $cspec && $cmd == */* ]]; then
[INFO] [stdout]        2863 │+            cspec=$(complete -p -- "${cmd##*/}" 2>/dev/null)
[INFO] [stdout]        2864 │+            [[ $cspec ]] && compcmd=${cmd##*/}
[INFO] [stdout]        2865 │+        fi
[INFO] [stdout]        2866 │+        # If still nothing, just load it for the basename
[INFO] [stdout]        2867 │+        if [[ ! $cspec ]]; then
[INFO] [stdout]        2868 │+            compcmd=${cmd##*/}
[INFO] [stdout]        2869 │+            _comp_load -D -- "$compcmd"
[INFO] [stdout]        2870 │+            cspec=$(complete -p -- "$compcmd" 2>/dev/null)
[INFO] [stdout]        2871 │+        fi
[INFO] [stdout]        2872 │+
[INFO] [stdout]        2873 │+        local retry_count=0
[INFO] [stdout]        2874 │+        while true; do # loop for the retry request by status 124
[INFO] [stdout]        2875 │+            local args original_cur=${comp_args[1]-$cur}
[INFO] [stdout]        2876 │+            if ((${#COMP_WORDS[@]} >= 2)); then
[INFO] [stdout]        2877 │+                args=("$cmd" "$original_cur" "${COMP_WORDS[-2]}")
[INFO] [stdout]        2878 │+            else
[INFO] [stdout]        2879 │+                args=("$cmd" "$original_cur")
[INFO] [stdout]        2880 │+            fi
[INFO] [stdout]        2881 │+
[INFO] [stdout]        2882 │+            if [[ ! $cspec ]]; then
[INFO] [stdout]        2883 │+                if ((${#COMPREPLY[@]} == 0)); then
[INFO] [stdout]        2884 │+                    # XXX will probably never happen as long as completion loader loads
[INFO] [stdout]        2885 │+                    #     *something* for every command thrown at it ($cspec != empty)
[INFO] [stdout]        2886 │+                    _comp_complete_minimal "${args[@]}"
[INFO] [stdout]        2887 │+                fi
[INFO] [stdout]        2888 │+            elif [[ $cspec == *\ -[CF]\ * ]]; then
[INFO] [stdout]        2889 │+                if [[ $cspec == *' -F '* ]]; then
[INFO] [stdout]        2890 │+                    # complete -F <function>
[INFO] [stdout]        2891 │+
[INFO] [stdout]        2892 │+                    # get function name
[INFO] [stdout]        2893 │+                    local func=${cspec#* -F }
[INFO] [stdout]        2894 │+                    func=${func%% *}
[INFO] [stdout]        2895 │+                    $func "${args[@]}"
[INFO] [stdout]        2896 │+
[INFO] [stdout]        2897 │+                    # restart completion (once) if function exited with 124
[INFO] [stdout]        2898 │+                    if (($? == 124 && retry_count++ == 0)); then
[INFO] [stdout]        2899 │+                        # Note: When the completion function returns 124, the
[INFO] [stdout]        2900 │+                        # state of COMPREPLY is discarded.
[INFO] [stdout]        2901 │+                        COMPREPLY=()
[INFO] [stdout]        2902 │+
[INFO] [stdout]        2903 │+                        cspec=$(complete -p -- "$compcmd" 2>/dev/null)
[INFO] [stdout]        2904 │+
[INFO] [stdout]        2905 │+                        # Note: When completion spec is removed after 124, we
[INFO] [stdout]        2906 │+                        # do not generate any completions including the default
[INFO] [stdout]        2907 │+                        # ones. This is the behavior of the original Bash
[INFO] [stdout]        2908 │+                        # progcomp.
[INFO] [stdout]        2909 │+                        [[ $cspec ]] || break
[INFO] [stdout]        2910 │+
[INFO] [stdout]        2911 │+                        continue
[INFO] [stdout]        2912 │+                    fi
[INFO] [stdout]        2913 │+                else
[INFO] [stdout]        2914 │+                    # complete -C <command>
[INFO] [stdout]        2915 │+
[INFO] [stdout]        2916 │+                    # get command name
[INFO] [stdout]        2917 │+                    local completer=${cspec#* -C \'}
[INFO] [stdout]        2918 │+
[INFO] [stdout]        2919 │+                    # completer commands are always single-quoted
[INFO] [stdout]        2920 │+                    if ! _comp_dequote "'$completer"; then
[INFO] [stdout]        2921 │+                        _minimal "${args[@]}"
[INFO] [stdout]        2922 │+                        break
[INFO] [stdout]        2923 │+                    fi
[INFO] [stdout]        2924 │+                    completer=${REPLY[0]}
[INFO] [stdout]        2925 │+
[INFO] [stdout]        2926 │+                    local -a suggestions
[INFO] [stdout]        2927 │+
[INFO] [stdout]        2928 │+                    local IFS=$' \t\n'
[INFO] [stdout]        2929 │+                    local reset_monitor=$(shopt -po monitor) reset_lastpipe=$(shopt -p lastpipe) reset_noglob=$(shopt -po noglob)
[INFO] [stdout]        2930 │+                    set +o monitor
[INFO] [stdout]        2931 │+                    shopt -s lastpipe
[INFO] [stdout]        2932 │+                    set -o noglob
[INFO] [stdout]        2933 │+
[INFO] [stdout]        2934 │+                    COMP_KEY="$COMP_KEY" COMP_LINE="$COMP_LINE" \
[INFO] [stdout]        2935 │+                        COMP_POINT="$COMP_POINT" COMP_TYPE="$COMP_TYPE" \
[INFO] [stdout]        2936 │+                        $completer "${args[@]}" | mapfile -t suggestions
[INFO] [stdout]        2937 │+
[INFO] [stdout]        2938 │+                    $reset_monitor
[INFO] [stdout]        2939 │+                    $reset_lastpipe
[INFO] [stdout]        2940 │+                    $reset_noglob
[INFO] [stdout]        2941 │+                    _comp_unlocal IFS
[INFO] [stdout]        2942 │+
[INFO] [stdout]        2943 │+                    local suggestion
[INFO] [stdout]        2944 │+                    local i=0
[INFO] [stdout]        2945 │+                    COMPREPLY=()
[INFO] [stdout]        2946 │+                    for suggestion in "${suggestions[@]}"; do
[INFO] [stdout]        2947 │+                        COMPREPLY[i]+=${COMPREPLY[i]+$'\n'}$suggestion
[INFO] [stdout]        2948 │+
[INFO] [stdout]        2949 │+                        if [[ $suggestion != *\\ ]]; then
[INFO] [stdout]        2950 │+                            ((i++))
[INFO] [stdout]        2951 │+                        fi
[INFO] [stdout]        2952 │+                    done
[INFO] [stdout]        2953 │+                fi
[INFO] [stdout]        2954 │+
[INFO] [stdout]        2955 │+                # restore initial compopts
[INFO] [stdout]        2956 │+                local opt
[INFO] [stdout]        2957 │+                while [[ $cspec == *" -o "* ]]; do
[INFO] [stdout]        2958 │+                    # FIXME: should we take "+o opt" into account?
[INFO] [stdout]        2959 │+                    cspec=${cspec#*-o }
[INFO] [stdout]        2960 │+                    opt=${cspec%% *}
[INFO] [stdout]        2961 │+                    compopt -o "$opt"
[INFO] [stdout]        2962 │+                    cspec=${cspec#"$opt"}
[INFO] [stdout]        2963 │+                done
[INFO] [stdout]        2964 │+            else
[INFO] [stdout]        2965 │+                cspec=${cspec#complete}
[INFO] [stdout]        2966 │+                cspec=${cspec%%@("$compcmd"|"'${compcmd//\'/\'\\\'\'}'")}
[INFO] [stdout]        2967 │+                eval "_comp_compgen -- $cspec"
[INFO] [stdout]        2968 │+            fi
[INFO] [stdout]        2969 │+            break
[INFO] [stdout]        2970 │+        done
[INFO] [stdout]        2971 │+    fi
[INFO] [stdout]        2972 │+}
[INFO] [stdout]        2973 │+
[INFO] [stdout]        2974 │+# A _comp_command_offset wrapper function for use when the offset is unknown.
[INFO] [stdout]        2975 │+# Only intended to be used as a completion function directly associated
[INFO] [stdout]        2976 │+# with a command, not to be invoked from within other completion functions.
[INFO] [stdout]        2977 │+#
[INFO] [stdout]        2978 │+# @since 2.12
[INFO] [stdout]        2979 │+_comp_command()
[INFO] [stdout]        2980 │+{
[INFO] [stdout]        2981 │+    # We unset the shell variable `words` locally to tell
[INFO] [stdout]        2982 │+    # `_comp_command_offset` that the index is intended to be that in
[INFO] [stdout]        2983 │+    # `COMP_WORDS` instead of `words`.
[INFO] [stdout]        2984 │+    local words
[INFO] [stdout]        2985 │+    unset -v words
[INFO] [stdout]        2986 │+
[INFO] [stdout]        2987 │+    local offset i
[INFO] [stdout]        2988 │+
[INFO] [stdout]        2989 │+    # find actual offset, as position of the first non-option
[INFO] [stdout]        2990 │+    offset=1
[INFO] [stdout]        2991 │+    for ((i = 1; i <= COMP_CWORD; i++)); do
[INFO] [stdout]        2992 │+        if [[ ${COMP_WORDS[i]} != -* ]]; then
[INFO] [stdout]        2993 │+            offset=$i
[INFO] [stdout]        2994 │+            break
[INFO] [stdout]        2995 │+        fi
[INFO] [stdout]        2996 │+    done
[INFO] [stdout]        2997 │+    _comp_command_offset $offset
[INFO] [stdout]        2998 │+}
[INFO] [stdout]        2999 │+complete -F _comp_command aoss command "do" else eval exec ltrace nice nohup padsp \
[INFO] [stdout]        3000 │+    "then" time tsocks vsound xargs
[INFO] [stdout]        3001 │+
[INFO] [stdout]        3002 │+# @since 2.12
[INFO] [stdout]        3003 │+_comp_root_command()
[INFO] [stdout]        3004 │+{
[INFO] [stdout]        3005 │+    local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
[INFO] [stdout]        3006 │+    local _comp_root_command=$1
[INFO] [stdout]        3007 │+    _comp_command
[INFO] [stdout]        3008 │+}
[INFO] [stdout]        3009 │+complete -F _comp_root_command fakeroot gksu gksudo kdesudo really
[INFO] [stdout]        3010 │+
[INFO] [stdout]        3011 │+# Return true if the completion should be treated as running as root
[INFO] [stdout]        3012 │+#
[INFO] [stdout]        3013 │+# @since 2.12
[INFO] [stdout]        3014 │+_comp_as_root()
[INFO] [stdout]        3015 │+{
[INFO] [stdout]        3016 │+    [[ $EUID -eq 0 || ${_comp_root_command-} ]]
[INFO] [stdout]        3017 │+}
[INFO] [stdout]        3018 │+
[INFO] [stdout]        3019 │+# Complete on available commands, subject to `no_empty_cmd_completion`.
[INFO] [stdout]        3020 │+# @return True (0) if one or more completions are generated, or otherwise False
[INFO] [stdout]        3021 │+# (1).  Note that it returns 1 even when the completion generation is canceled
[INFO] [stdout]        3022 │+# by `shopt -s no_empty_cmd_completion`.
[INFO] [stdout]        3023 │+#
[INFO] [stdout]        3024 │+# @since 2.12
[INFO] [stdout]        3025 │+_comp_compgen_commands()
[INFO] [stdout]        3026 │+{
[INFO] [stdout]        3027 │+    [[ ! ${cur-} ]] && shopt -q no_empty_cmd_completion && return 1
[INFO] [stdout]        3028 │+    # -o filenames for e.g. spaces in paths to and in command names
[INFO] [stdout]        3029 │+    _comp_compgen -- -c -o plusdirs && compopt -o filenames
[INFO] [stdout]        3030 │+}
[INFO] [stdout]        3031 │+
[INFO] [stdout]        3032 │+# @since 2.12
[INFO] [stdout]        3033 │+_comp_complete_longopt()
[INFO] [stdout]        3034 │+{
[INFO] [stdout]        3035 │+    local cur prev words cword was_split comp_args
[INFO] [stdout]        3036 │+    _comp_initialize -s -- "$@" || return
[INFO] [stdout]        3037 │+
[INFO] [stdout]        3038 │+    case "${prev,,}" in
[INFO] [stdout]        3039 │+        --help | --usage | --version)
[INFO] [stdout]        3040 │+            return
[INFO] [stdout]        3041 │+            ;;
[INFO] [stdout]        3042 │+        --!(no-*)dir*)
[INFO] [stdout]        3043 │+            _comp_compgen -a filedir -d
[INFO] [stdout]        3044 │+            return
[INFO] [stdout]        3045 │+            ;;
[INFO] [stdout]        3046 │+        --!(no-*)@(file|path)*)
[INFO] [stdout]        3047 │+            _comp_compgen -a filedir
[INFO] [stdout]        3048 │+            return
[INFO] [stdout]        3049 │+            ;;
[INFO] [stdout]        3050 │+        --+([-a-z0-9_]))
[INFO] [stdout]        3051 │+            local argtype=$(LC_ALL=C $1 --help 2>&1 | command sed -ne \
[INFO] [stdout]        3052 │+                "s|.*$prev\[\{0,1\}=[<[]\{0,1\}\([-A-Za-z0-9_]\{1,\}\).*|\1|p")
[INFO] [stdout]        3053 │+            case ${argtype,,} in
[INFO] [stdout]        3054 │+                *dir*)
[INFO] [stdout]        3055 │+                    _comp_compgen -a filedir -d
[INFO] [stdout]        3056 │+                    return
[INFO] [stdout]        3057 │+                    ;;
[INFO] [stdout]        3058 │+                *file* | *path*)
[INFO] [stdout]        3059 │+                    _comp_compgen -a filedir
[INFO] [stdout]        3060 │+                    return
[INFO] [stdout]        3061 │+                    ;;
[INFO] [stdout]        3062 │+            esac
[INFO] [stdout]        3063 │+            ;;
[INFO] [stdout]        3064 │+    esac
[INFO] [stdout]        3065 │+
[INFO] [stdout]        3066 │+    [[ $was_split ]] && return
[INFO] [stdout]        3067 │+
[INFO] [stdout]        3068 │+    if [[ $cur == -* ]]; then
[INFO] [stdout]        3069 │+        _comp_compgen_split -- "$(LC_ALL=C $1 --help 2>&1 |
[INFO] [stdout]        3070 │+            while read -r line; do
[INFO] [stdout]        3071 │+                [[ $line =~ --[A-Za-z0-9]+([-_][A-Za-z0-9]+)*=? ]] &&
[INFO] [stdout]        3072 │+                    printf '%s\n' "${BASH_REMATCH[0]}"
[INFO] [stdout]        3073 │+            done)"
[INFO] [stdout]        3074 │+        [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
[INFO] [stdout]        3075 │+    elif [[ $1 == *@(rmdir|chroot) ]]; then
[INFO] [stdout]        3076 │+        _comp_compgen -a filedir -d
[INFO] [stdout]        3077 │+    else
[INFO] [stdout]        3078 │+        [[ $1 == *mkdir ]] && compopt -o nospace
[INFO] [stdout]        3079 │+        _comp_compgen -a filedir
[INFO] [stdout]        3080 │+    fi
[INFO] [stdout]        3081 │+}
[INFO] [stdout]        3082 │+# makeinfo and texi2dvi are defined elsewhere.
[INFO] [stdout]        3083 │+complete -F _comp_complete_longopt \
[INFO] [stdout]        3084 │+    a2ps awk base64 bash bc bison cat chroot colordiff cp \
[INFO] [stdout]        3085 │+    csplit cut date df diff dir du enscript expand fmt fold gperf \
[INFO] [stdout]        3086 │+    grep grub head irb ld ldd less ln ls m4 mkdir mkfifo mknod \
[INFO] [stdout]        3087 │+    mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
[INFO] [stdout]        3088 │+    sed seq shar sort split strip sum tac tail tee \
[INFO] [stdout]        3089 │+    texindex touch tr uname unexpand uniq units vdir wc who
[INFO] [stdout]        3090 │+
[INFO] [stdout]        3091 │+# @since 2.12
[INFO] [stdout]        3092 │+declare -Ag _comp_xspecs
[INFO] [stdout]        3093 │+
[INFO] [stdout]        3094 │+# @since 2.12
[INFO] [stdout]        3095 │+_comp_complete_filedir_xspec()
[INFO] [stdout]        3096 │+{
[INFO] [stdout]        3097 │+    local cur prev words cword comp_args
[INFO] [stdout]        3098 │+    _comp_initialize -- "$@" || return
[INFO] [stdout]        3099 │+    _comp_compgen_filedir_xspec "$1"
[INFO] [stdout]        3100 │+}
[INFO] [stdout]        3101 │+
[INFO] [stdout]        3102 │+# @since 2.12
[INFO] [stdout]        3103 │+_comp_compgen_filedir_xspec()
[INFO] [stdout]        3104 │+{
[INFO] [stdout]        3105 │+    _comp_compgen_tilde && return
[INFO] [stdout]        3106 │+
[INFO] [stdout]        3107 │+    local REPLY
[INFO] [stdout]        3108 │+    _comp_quote_compgen "$cur"
[INFO] [stdout]        3109 │+    local quoted=$REPLY
[INFO] [stdout]        3110 │+
[INFO] [stdout]        3111 │+    local xspec=${_comp_xspecs[${1##*/}]-${_xspecs[${1##*/}]-}}
[INFO] [stdout]        3112 │+    local -a toks
[INFO] [stdout]        3113 │+    _comp_compgen -v toks -c "$quoted" -- -d
[INFO] [stdout]        3114 │+
[INFO] [stdout]        3115 │+    # Munge xspec to contain uppercase version too
[INFO] [stdout]        3116 │+    # https://lists.gnu.org/archive/html/bug-bash/2010-09/msg00036.html
[INFO] [stdout]        3117 │+    # news://news.gmane.io/4C940E1C.1010304@case.edu
[INFO] [stdout]        3118 │+    eval xspec="${xspec}"
[INFO] [stdout]        3119 │+    local matchop=!
[INFO] [stdout]        3120 │+    if [[ $xspec == !* ]]; then
[INFO] [stdout]        3121 │+        xspec=${xspec#!}
[INFO] [stdout]        3122 │+        matchop=@
[INFO] [stdout]        3123 │+    fi
[INFO] [stdout]        3124 │+    xspec="$matchop($xspec|${xspec^^})"
[INFO] [stdout]        3125 │+
[INFO] [stdout]        3126 │+    _comp_compgen -av toks -c "$quoted" -- -f -X "@(|!($xspec))"
[INFO] [stdout]        3127 │+
[INFO] [stdout]        3128 │+    # Try without filter if it failed to produce anything and configured to
[INFO] [stdout]        3129 │+    [[ ${BASH_COMPLETION_FILEDIR_FALLBACK-} && ${#toks[@]} -lt 1 ]] &&
[INFO] [stdout]        3130 │+        _comp_compgen -av toks -c "$quoted" -- -f
[INFO] [stdout]        3131 │+
[INFO] [stdout]        3132 │+    ((${#toks[@]})) || return 1
[INFO] [stdout]        3133 │+
[INFO] [stdout]        3134 │+    # Remove . and .. (as well as */. and */..) from suggestions, unless .. or
[INFO] [stdout]        3135 │+    # */.. was typed explicitly by the user (for users who use tab-completion
[INFO] [stdout]        3136 │+    # to append a slash after '..')
[INFO] [stdout]        3137 │+    if [[ $cur != ?(*/).. ]]; then
[INFO] [stdout]        3138 │+        _comp_compgen -Rv toks -- -X '?(*/)@(.|..)' -W '"${toks[@]}"' || return 1
[INFO] [stdout]        3139 │+    fi
[INFO] [stdout]        3140 │+
[INFO] [stdout]        3141 │+    compopt -o filenames
[INFO] [stdout]        3142 │+    _comp_compgen -RU toks -- -W '"${toks[@]}"'
[INFO] [stdout]        3143 │+}
[INFO] [stdout]        3144 │+
[INFO] [stdout]        3145 │+_comp__init_install_xspec()
[INFO] [stdout]        3146 │+{
[INFO] [stdout]        3147 │+    local xspec=$1 cmd
[INFO] [stdout]        3148 │+    shift
[INFO] [stdout]        3149 │+    for cmd in "$@"; do
[INFO] [stdout]        3150 │+        _comp_xspecs[$cmd]=$xspec
[INFO] [stdout]        3151 │+    done
[INFO] [stdout]        3152 │+}
[INFO] [stdout]        3153 │+# bzcmp, bzdiff, bz*grep, bzless, bzmore intentionally not here, see Debian: #455510
[INFO] [stdout]        3154 │+_comp__init_install_xspec '!*.?(t)bz?(2)' bunzip2 bzcat pbunzip2 pbzcat lbunzip2 lbzcat
[INFO] [stdout]        3155 │+_comp__init_install_xspec '!*.@(zip|[aegjkswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|?(o)xps|epub|cbz|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|vsix|whl|[Ff][Cc][Ss]td)' unzip zipinfo
[INFO] [stdout]        3156 │+_comp__init_install_xspec '*.Z' compress znew
[INFO] [stdout]        3157 │+# zcmp, zdiff, z*grep, zless, zmore intentionally not here, see Debian: #455510
[INFO] [stdout]        3158 │+_comp__init_install_xspec '!*.@(Z|[gGd]z|t[ag]z)' gunzip zcat
[INFO] [stdout]        3159 │+_comp__init_install_xspec '!*.@(Z|[gGdz]z|t[ag]z)' unpigz
[INFO] [stdout]        3160 │+_comp__init_install_xspec '!*.Z' uncompress
[INFO] [stdout]        3161 │+# lzcmp, lzdiff intentionally not here, see Debian: #455510
[INFO] [stdout]        3162 │+_comp__init_install_xspec '!*.@(tlz|lzma)' lzcat lzegrep lzfgrep lzgrep lzless lzmore unlzma
[INFO] [stdout]        3163 │+_comp__init_install_xspec '!*.@(?(t)xz|tlz|lzma)' unxz xzcat
[INFO] [stdout]        3164 │+_comp__init_install_xspec '!*.lrz' lrunzip
[INFO] [stdout]        3165 │+_comp__init_install_xspec '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
[INFO] [stdout]        3166 │+_comp__init_install_xspec '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)' qiv
[INFO] [stdout]        3167 │+_comp__init_install_xspec '!*.@(gif|jp?(e)g?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgpn]m|webp|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)' xv
[INFO] [stdout]        3168 │+_comp__init_install_xspec '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview
[INFO] [stdout]        3169 │+_comp__init_install_xspec '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi kdvi
[INFO] [stdout]        3170 │+_comp__init_install_xspec '!*.dvi' dvips dviselect dvitype dvipdf advi dvipdfm dvipdfmx
[INFO] [stdout]        3171 │+_comp__init_install_xspec '!*.[pf]df' acroread gpdf xpdf
[INFO] [stdout]        3172 │+_comp__init_install_xspec '!*.@(?(e)ps|pdf)' kpdf
[INFO] [stdout]        3173 │+_comp__init_install_xspec '!*.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM|md|markdown)?(.?(gz|GZ|bz2|BZ2|xz|XZ)))' okular
[INFO] [stdout]        3174 │+_comp__init_install_xspec '!*.pdf' epdfview pdfunite
[INFO] [stdout]        3175 │+_comp__init_install_xspec '!*.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)' zathura
[INFO] [stdout]        3176 │+_comp__init_install_xspec '!*.@(?(e)ps|pdf)' ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr
[INFO] [stdout]        3177 │+_comp__init_install_xspec '!*.texi*' makeinfo texi2html
[INFO] [stdout]        3178 │+_comp__init_install_xspec '!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi xetex xelatex luatex lualatex
[INFO] [stdout]        3179 │+_comp__init_install_xspec '!*.mp3' mpg123 mpg321 madplay
[INFO] [stdout]        3180 │+_comp__init_install_xspec '!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))' xine aaxine cacaxine fbxine
[INFO] [stdout]        3181 │+_comp__init_install_xspec '!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|opus|OPUS|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))' kaffeine dragon totem
[INFO] [stdout]        3182 │+_comp__init_install_xspec '!*.@(avi|asf|wmv)' aviplay
[INFO] [stdout]        3183 │+_comp__init_install_xspec '!*.@(rm?(j)|ra?(m)|smi?(l))' realplay
[INFO] [stdout]        3184 │+_comp__init_install_xspec '!*.@(mpg|mpeg|avi|mov|qt)' xanim
[INFO] [stdout]        3185 │+_comp__init_install_xspec '!*.@(og[ag]|m3u|flac|spx)' ogg123
[INFO] [stdout]        3186 │+_comp__init_install_xspec '!*.@(mp3|ogg|pls|m3u)' gqmpeg freeamp
[INFO] [stdout]        3187 │+_comp__init_install_xspec '!*.fig' xfig
[INFO] [stdout]        3188 │+_comp__init_install_xspec '!*.@(mid?(i)|cmf)' playmidi
[INFO] [stdout]        3189 │+_comp__init_install_xspec '!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)' timidity
[INFO] [stdout]        3190 │+_comp__init_install_xspec '!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)' modplugplay modplug123
[INFO] [stdout]        3191 │+_comp__init_install_xspec '*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
[INFO] [stdout]        3192 │+_comp__init_install_xspec '!*.@(zip|z|gz|tgz)' bzme
[INFO] [stdout]        3193 │+# konqueror not here on purpose, it's more than a web/html browser
[INFO] [stdout]        3194 │+_comp__init_install_xspec '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx galeon dillo elinks amaya epiphany
[INFO] [stdout]        3195 │+_comp__init_install_xspec '!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)' oowriter lowriter
[INFO] [stdout]        3196 │+_comp__init_install_xspec '!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)' ooimpress loimpress
[INFO] [stdout]        3197 │+_comp__init_install_xspec '!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)' oocalc localc
[INFO] [stdout]        3198 │+_comp__init_install_xspec '!*.@(sxd|std|sda|sdd|?(f)odg|otg)' oodraw lodraw
[INFO] [stdout]        3199 │+_comp__init_install_xspec '!*.@(sxm|smf|mml|odf)' oomath lomath
[INFO] [stdout]        3200 │+_comp__init_install_xspec '!*.odb' oobase lobase
[INFO] [stdout]        3201 │+_comp__init_install_xspec '!*.[rs]pm' rpm2cpio
[INFO] [stdout]        3202 │+_comp__init_install_xspec '!*.aux' bibtex
[INFO] [stdout]        3203 │+_comp__init_install_xspec '!*.po' poedit gtranslator kbabel lokalize
[INFO] [stdout]        3204 │+_comp__init_install_xspec '!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' harbour gharbour hbpp
[INFO] [stdout]        3205 │+_comp__init_install_xspec '!*.[Hh][Rr][Bb]' hbrun
[INFO] [stdout]        3206 │+_comp__init_install_xspec '!*.ly' lilypond ly2dvi
[INFO] [stdout]        3207 │+_comp__init_install_xspec '!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))' cdiff
[INFO] [stdout]        3208 │+_comp__init_install_xspec '!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)' portecle
[INFO] [stdout]        3209 │+_comp__init_install_xspec '!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)' kid3 kid3-qt
[INFO] [stdout]        3210 │+unset -f _comp__init_install_xspec
[INFO] [stdout]        3211 │+
[INFO] [stdout]        3212 │+# Minimal completion to use as fallback in _comp_complete_load.
[INFO] [stdout]        3213 │+# TODO:API: rename per conventions
[INFO] [stdout]        3214 │+_comp_complete_minimal()
[INFO] [stdout]        3215 │+{
[INFO] [stdout]        3216 │+    local cur prev words cword comp_args
[INFO] [stdout]        3217 │+    _comp_initialize -- "$@" || return
[INFO] [stdout]        3218 │+    compopt -o bashdefault -o default
[INFO] [stdout]        3219 │+}
[INFO] [stdout]        3220 │+# Complete the empty string to allow completion of '>', '>>', and '<' on < 4.3
[INFO] [stdout]        3221 │+# https://lists.gnu.org/archive/html/bug-bash/2012-01/msg00045.html
[INFO] [stdout]        3222 │+complete -F _comp_complete_minimal ''
[INFO] [stdout]        3223 │+
[INFO] [stdout]        3224 │+# Initialize the variable "_comp__base_directory"
[INFO] [stdout]        3225 │+# @var[out] _comp__base_directory
[INFO] [stdout]        3226 │+_comp__init_base_directory()
[INFO] [stdout]        3227 │+{
[INFO] [stdout]        3228 │+    local REPLY
[INFO] [stdout]        3229 │+    _comp_abspath "${BASH_SOURCE[0]-./bash_completion}"
[INFO] [stdout]        3230 │+    _comp__base_directory=${REPLY%/*}
[INFO] [stdout]        3231 │+    [[ $_comp__base_directory ]] || _comp__base_directory=/
[INFO] [stdout]        3232 │+    unset -f "$FUNCNAME"
[INFO] [stdout]        3233 │+}
[INFO] [stdout]        3234 │+_comp__init_base_directory
[INFO] [stdout]        3235 │+
[INFO] [stdout]        3236 │+# @since 2.12
[INFO] [stdout]        3237 │+_comp_load()
[INFO] [stdout]        3238 │+{
[INFO] [stdout]        3239 │+    local flag_fallback_default="" IFS=$' \t\n'
[INFO] [stdout]        3240 │+    local OPTIND=1 OPTARG="" OPTERR=0 opt
[INFO] [stdout]        3241 │+    while getopts ':D' opt "$@"; do
[INFO] [stdout]        3242 │+        case $opt in
[INFO] [stdout]        3243 │+            D) flag_fallback_default=set ;;
[INFO] [stdout]        3244 │+            *)
[INFO] [stdout]        3245 │+                echo "bash_completion: $FUNCNAME: usage error" >&2
[INFO] [stdout]        3246 │+                return 2
[INFO] [stdout]        3247 │+                ;;
[INFO] [stdout]        3248 │+        esac
[INFO] [stdout]        3249 │+    done
[INFO] [stdout]        3250 │+    shift "$((OPTIND - 1))"
[INFO] [stdout]        3251 │+
[INFO] [stdout]        3252 │+    local cmd=$1 cmdname=${1##*/} dir compfile
[INFO] [stdout]        3253 │+    local -a paths
[INFO] [stdout]        3254 │+    [[ $cmdname ]] || return 1
[INFO] [stdout]        3255 │+
[INFO] [stdout]        3256 │+    local backslash=
[INFO] [stdout]        3257 │+    if [[ $cmd == \\* ]]; then
[INFO] [stdout]        3258 │+        cmd=${cmd:1}
[INFO] [stdout]        3259 │+        # If we already have a completion for the "real" command, use it
[INFO] [stdout]        3260 │+        $(complete -p -- "$cmd" 2>/dev/null || echo false) "\\$cmd" && return 0
[INFO] [stdout]        3261 │+        backslash=\\
[INFO] [stdout]        3262 │+    fi
[INFO] [stdout]        3263 │+
[INFO] [stdout]        3264 │+    # Resolve absolute path to $cmd
[INFO] [stdout]        3265 │+    local REPLY pathcmd origcmd=$cmd
[INFO] [stdout]        3266 │+    if pathcmd=$(type -P -- "$cmd"); then
[INFO] [stdout]        3267 │+        _comp_abspath "$pathcmd"
[INFO] [stdout]        3268 │+        cmd=$REPLY
[INFO] [stdout]        3269 │+    fi
[INFO] [stdout]        3270 │+
[INFO] [stdout]        3271 │+    local -a dirs=()
[INFO] [stdout]        3272 │+
[INFO] [stdout]        3273 │+    # Lookup order:
[INFO] [stdout]        3274 │+    # 1) From BASH_COMPLETION_USER_DIR (e.g. ~/.local/share/bash-completion):
[INFO] [stdout]        3275 │+    # User installed completions.
[INFO] [stdout]        3276 │+    if [[ ${BASH_COMPLETION_USER_DIR-} ]]; then
[INFO] [stdout]        3277 │+        _comp_split -F : paths "$BASH_COMPLETION_USER_DIR" &&
[INFO] [stdout]        3278 │+            dirs+=("${paths[@]/%//completions}")
[INFO] [stdout]        3279 │+    else
[INFO] [stdout]        3280 │+        dirs=("${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions")
[INFO] [stdout]        3281 │+    fi
[INFO] [stdout]        3282 │+
[INFO] [stdout]        3283 │+    # 2) From the location of bash_completion: Completions relative to the main
[INFO] [stdout]        3284 │+    # script. This is primarily for run-in-place-from-git-clone setups, where
[INFO] [stdout]        3285 │+    # we want to prefer in-tree completions over ones possibly coming with a
[INFO] [stdout]        3286 │+    # system installed bash-completion. (Due to usual install layouts, this
[INFO] [stdout]        3287 │+    # often hits the correct completions in system installations, too.)
[INFO] [stdout]        3288 │+    dirs+=("$_comp__base_directory/completions")
[INFO] [stdout]        3289 │+
[INFO] [stdout]        3290 │+    # 3) From bin directories extracted from the specified path to the command,
[INFO] [stdout]        3291 │+    # the real path to the command, and $PATH
[INFO] [stdout]        3292 │+    paths=()
[INFO] [stdout]        3293 │+    [[ $cmd == /* ]] && paths+=("${cmd%/*}")
[INFO] [stdout]        3294 │+    _comp_realcommand "$cmd" && paths+=("${REPLY%/*}")
[INFO] [stdout]        3295 │+    _comp_split -aF : paths "$PATH"
[INFO] [stdout]        3296 │+    for dir in "${paths[@]%/}"; do
[INFO] [stdout]        3297 │+        [[ $dir == ?*/@(bin|sbin) ]] &&
[INFO] [stdout]        3298 │+            dirs+=("${dir%/*}/share/bash-completion/completions")
[INFO] [stdout]        3299 │+    done
[INFO] [stdout]        3300 │+
[INFO] [stdout]        3301 │+    # 4) From XDG_DATA_DIRS or system dirs (e.g. /usr/share, /usr/local/share):
[INFO] [stdout]        3302 │+    # Completions in the system data dirs.
[INFO] [stdout]        3303 │+    _comp_split -F : paths "${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" &&
[INFO] [stdout]        3304 │+        dirs+=("${paths[@]/%//bash-completion/completions}")
[INFO] [stdout]        3305 │+
[INFO] [stdout]        3306 │+    # Set up default $IFS in case loaded completions depend on it,
[INFO] [stdout]        3307 │+    # as well as for $compspec invocation below.
[INFO] [stdout]        3308 │+    local IFS=$' \t\n'
[INFO] [stdout]        3309 │+
[INFO] [stdout]        3310 │+    # Look up and source
[INFO] [stdout]        3311 │+    shift
[INFO] [stdout]        3312 │+    local i prefix compspec
[INFO] [stdout]        3313 │+    for prefix in "" _; do # Regular from all dirs first, then fallbacks
[INFO] [stdout]        3314 │+        for i in ${!dirs[*]}; do
[INFO] [stdout]        3315 │+            dir=${dirs[i]}
[INFO] [stdout]        3316 │+            if [[ ! -d $dir ]]; then
[INFO] [stdout]        3317 │+                unset -v 'dirs[i]'
[INFO] [stdout]        3318 │+                continue
[INFO] [stdout]        3319 │+            fi
[INFO] [stdout]        3320 │+            for compfile in "$prefix$cmdname" "$prefix$cmdname.bash"; do
[INFO] [stdout]        3321 │+                compfile="$dir/$compfile"
[INFO] [stdout]        3322 │+                # Avoid trying to source dirs as long as we support bash < 4.3
[INFO] [stdout]        3323 │+                # to avoid an fd leak; https://bugzilla.redhat.com/903540
[INFO] [stdout]        3324 │+                if [[ -d $compfile ]]; then
[INFO] [stdout]        3325 │+                    # Do not warn with . or .. (especially the former is common)
[INFO] [stdout]        3326 │+                    [[ $compfile == */.?(.) ]] ||
[INFO] [stdout]        3327 │+                        echo "bash_completion: $compfile: is a directory" >&2
[INFO] [stdout]        3328 │+                elif [[ -e $compfile ]] && . "$compfile" "$cmd" "$@"; then
[INFO] [stdout]        3329 │+                    # At least $cmd is expected to have a completion set when
[INFO] [stdout]        3330 │+                    # we return successfully; see if it already does
[INFO] [stdout]        3331 │+                    if compspec=$(complete -p -- "$cmd" 2>/dev/null); then
[INFO] [stdout]        3332 │+                        # $cmd is the case in which we do backslash processing
[INFO] [stdout]        3333 │+                        [[ $backslash ]] && eval "$compspec \"\$backslash\$cmd\""
[INFO] [stdout]        3334 │+                        # If invoked without path, that one should be set, too
[INFO] [stdout]        3335 │+                        # ...but let's not overwrite an existing one, if any
[INFO] [stdout]        3336 │+                        [[ $origcmd != */* ]] &&
[INFO] [stdout]        3337 │+                            ! complete -p -- "$origcmd" &>/dev/null &&
[INFO] [stdout]        3338 │+                            eval "$compspec \"\$origcmd\""
[INFO] [stdout]        3339 │+                        return 0
[INFO] [stdout]        3340 │+                    fi
[INFO] [stdout]        3341 │+                    # If not, see if we got one for $cmdname
[INFO] [stdout]        3342 │+                    if [[ $cmdname != "$cmd" ]] && compspec=$(complete -p -- "$cmdname" 2>/dev/null); then
[INFO] [stdout]        3343 │+                        # Use that for $cmd too, if we have a full path to it
[INFO] [stdout]        3344 │+                        [[ $cmd == /* ]] && eval "$compspec \"\$cmd\""
[INFO] [stdout]        3345 │+                        return 0
[INFO] [stdout]        3346 │+                    fi
[INFO] [stdout]        3347 │+                    # Nothing expected was set, continue lookup
[INFO] [stdout]        3348 │+                fi
[INFO] [stdout]        3349 │+            done
[INFO] [stdout]        3350 │+        done
[INFO] [stdout]        3351 │+    done
[INFO] [stdout]        3352 │+
[INFO] [stdout]        3353 │+    # Look up simple "xspec" completions
[INFO] [stdout]        3354 │+    [[ -v _comp_xspecs[$cmdname] || -v _xspecs[$cmdname] ]] &&
[INFO] [stdout]        3355 │+        complete -F _comp_complete_filedir_xspec "$cmdname" "$backslash$cmdname" && return 0
[INFO] [stdout]        3356 │+
[INFO] [stdout]        3357 │+    if [[ $flag_fallback_default ]]; then
[INFO] [stdout]        3358 │+        complete -F _comp_complete_minimal -- "$origcmd" && return 0
[INFO] [stdout]        3359 │+    fi
[INFO] [stdout]        3360 │+
[INFO] [stdout]        3361 │+    return 1
[INFO] [stdout]        3362 │+}
[INFO] [stdout]        3363 │+
[INFO] [stdout]        3364 │+# set up dynamic completion loading
[INFO] [stdout]        3365 │+# @since 2.12
[INFO] [stdout]        3366 │+_comp_complete_load()
[INFO] [stdout]        3367 │+{
[INFO] [stdout]        3368 │+    # $1=_EmptycmD_ already for empty cmds in bash 4.3, set to it for earlier
[INFO] [stdout]        3369 │+    local cmd=${1:-_EmptycmD_}
[INFO] [stdout]        3370 │+
[INFO] [stdout]        3371 │+    # Pass -D to define *something*, or otherwise there will be no completion
[INFO] [stdout]        3372 │+    # at all.
[INFO] [stdout]        3373 │+    _comp_load -D -- "$cmd" && return 124
[INFO] [stdout]        3374 │+} &&
[INFO] [stdout]        3375 │+    complete -D -F _comp_complete_load
[INFO] [stdout]        3376 │+
[INFO] [stdout]        3377 │+# Function for loading and calling functions from dynamically loaded
[INFO] [stdout]        3378 │+# completion files that may not have been sourced yet.
[INFO] [stdout]        3379 │+# @param $1 completion file to load function from in case it is missing
[INFO] [stdout]        3380 │+# @param $2 the xfunc name.  When it does not start with `_',
[INFO] [stdout]        3381 │+#   `_comp_xfunc_${1//[^a-zA-Z0-9_]/_}_$2' is used for the actual name of the
[INFO] [stdout]        3382 │+#   shell function.
[INFO] [stdout]        3383 │+# @param $3... if any, specifies the arguments that are passed to the xfunc.
[INFO] [stdout]        3384 │+# @since 2.12
[INFO] [stdout]        3385 │+_comp_xfunc()
[INFO] [stdout]        3386 │+{
[INFO] [stdout]        3387 │+    local xfunc_name=$2
[INFO] [stdout]        3388 │+    [[ $xfunc_name == _* ]] ||
[INFO] [stdout]        3389 │+        xfunc_name=_comp_xfunc_${1//[^a-zA-Z0-9_]/_}_$xfunc_name
[INFO] [stdout]        3390 │+    declare -F -- "$xfunc_name" &>/dev/null || _comp_load -- "$1"
[INFO] [stdout]        3391 │+    "$xfunc_name" "${@:3}"
[INFO] [stdout]        3392 │+}
[INFO] [stdout]        3393 │+
[INFO] [stdout]        3394 │+# Call a POSIX-compatible awk.  Solaris awk is not POSIX-compliant, but Solaris
[INFO] [stdout]        3395 │+# provides a POSIX-compatible version through /usr/xpg4/bin/awk.  We switch the
[INFO] [stdout]        3396 │+# implementation to /usr/xpg4/bin/awk in Solaris if any.
[INFO] [stdout]        3397 │+# @since 2.12
[INFO] [stdout]        3398 │+if [[ $OSTYPE == *solaris* && -x /usr/xpg4/bin/awk ]]; then
[INFO] [stdout]        3399 │+    _comp_awk()
[INFO] [stdout]        3400 │+    {
[INFO] [stdout]        3401 │+        /usr/xpg4/bin/awk "$@"
[INFO] [stdout]        3402 │+    }
[INFO] [stdout]        3403 │+else
[INFO] [stdout]        3404 │+    _comp_awk()
[INFO] [stdout]        3405 │+    {
[INFO] [stdout]        3406 │+        command awk "$@"
[INFO] [stdout]        3407 │+    }
[INFO] [stdout]        3408 │+fi
[INFO] [stdout]        3409 │+
[INFO] [stdout]        3410 │+# List custom/extra completion files to source on the startup
[INFO] [stdout]        3411 │+## @param $1 path Path to "bash_completion"
[INFO] [stdout]        3412 │+## @var[out] _comp__init_startup_configs
[INFO] [stdout]        3413 │+_comp__init_collect_startup_configs()
[INFO] [stdout]        3414 │+{
[INFO] [stdout]        3415 │+    local base_path=${1:-${BASH_SOURCE[1]}}
[INFO] [stdout]        3416 │+    _comp__init_startup_configs=()
[INFO] [stdout]        3417 │+
[INFO] [stdout]        3418 │+    # source compat completion directory definitions
[INFO] [stdout]        3419 │+    local -a compat_dirs=()
[INFO] [stdout]        3420 │+    local compat_dir
[INFO] [stdout]        3421 │+    if [[ ${BASH_COMPLETION_COMPAT_DIR-} ]]; then
[INFO] [stdout]        3422 │+        compat_dirs+=("$BASH_COMPLETION_COMPAT_DIR")
[INFO] [stdout]        3423 │+    else
[INFO] [stdout]        3424 │+        compat_dirs+=(/etc/bash_completion.d)
[INFO] [stdout]        3425 │+        # Similarly as for the "completions" dir, look up from relative to
[INFO] [stdout]        3426 │+        # bash_completion, primarily for installed-with-prefix and
[INFO] [stdout]        3427 │+        # run-in-place-from-git-clone setups.  Notably we do it after the
[INFO] [stdout]        3428 │+        # system location here, in order to prefer in-tree variables and
[INFO] [stdout]        3429 │+        # functions.
[INFO] [stdout]        3430 │+        if [[ $_comp__base_directory == */share/bash-completion ]]; then
[INFO] [stdout]        3431 │+            compat_dir=${_comp__base_directory%/share/bash-completion}/etc/bash_completion.d
[INFO] [stdout]        3432 │+        else
[INFO] [stdout]        3433 │+            compat_dir=$_comp__base_directory/bash_completion.d
[INFO] [stdout]        3434 │+        fi
[INFO] [stdout]        3435 │+        [[ ${compat_dirs[0]} == "$compat_dir" ]] ||
[INFO] [stdout]        3436 │+            compat_dirs+=("$compat_dir")
[INFO] [stdout]        3437 │+    fi
[INFO] [stdout]        3438 │+    for compat_dir in "${compat_dirs[@]}"; do
[INFO] [stdout]        3439 │+        [[ -d $compat_dir && -r $compat_dir && -x $compat_dir ]] || continue
[INFO] [stdout]        3440 │+        local compat_files
[INFO] [stdout]        3441 │+        _comp_expand_glob compat_files '"$compat_dir"/*'
[INFO] [stdout]        3442 │+        local compat_file
[INFO] [stdout]        3443 │+        for compat_file in "${compat_files[@]}"; do
[INFO] [stdout]        3444 │+            [[ ${compat_file##*/} != @($_comp_backup_glob|Makefile*|${BASH_COMPLETION_COMPAT_IGNORE-}) &&
[INFO] [stdout]        3445 │+                -f $compat_file && -r $compat_file ]] &&
[INFO] [stdout]        3446 │+                _comp__init_startup_configs+=("$compat_file")
[INFO] [stdout]        3447 │+        done
[INFO] [stdout]        3448 │+    done
[INFO] [stdout]        3449 │+
[INFO] [stdout]        3450 │+    # source user completion file
[INFO] [stdout]        3451 │+    #
[INFO] [stdout]        3452 │+    # Remark: We explicitly check that $user_completion is not '/dev/null'
[INFO] [stdout]        3453 │+    #   since /dev/null may be a regular file in broken systems and can contain
[INFO] [stdout]        3454 │+    #   arbitrary garbages of suppressed command outputs.
[INFO] [stdout]        3455 │+    local user_file=${BASH_COMPLETION_USER_FILE:-~/.bash_completion}
[INFO] [stdout]        3456 │+    [[ $user_file != "$base_path" && $user_file != /dev/null && -r $user_file && -f $user_file ]] &&
[INFO] [stdout]        3457 │+        _comp__init_startup_configs+=("$user_file")
[INFO] [stdout]        3458 │+
[INFO] [stdout]        3459 │+    unset -f "$FUNCNAME"
[INFO] [stdout]        3460 │+}
[INFO] [stdout]        3461 │+_comp__init_collect_startup_configs "$BASH_SOURCE"
[INFO] [stdout]        3462 │+# shellcheck disable=SC2154
[INFO] [stdout]        3463 │+for _comp_init_startup_config in "${_comp__init_startup_configs[@]}"; do
[INFO] [stdout]        3464 │+    . "$_comp_init_startup_config"
[INFO] [stdout]        3465 │+done
[INFO] [stdout]        3466 │+unset -v _comp__init_startup_configs _comp_init_startup_config
[INFO] [stdout]        3467 │+unset -f have
[INFO] [stdout]        3468 │+unset -v have
[INFO] [stdout]        3469 │+
[INFO] [stdout]        3470 │+set $_comp__init_original_set_v
[INFO] [stdout]        3471 │+unset -v _comp__init_original_set_v
[INFO] [stdout]        3472 │+
[INFO] [stdout]        3473 │+# ex: filetype=sh
[INFO] [stdout]        3474 │+
[INFO] [stdout]        3475 │+
[INFO] [stdout]        3476 │+_mycli() {
[INFO] [stdout]        3477 │+    if ! command -v usage &> /dev/null; then
[INFO] [stdout]        3478 │+        echo >&2
[INFO] [stdout]        3479 │+        echo "Error: usage CLI not found. This is required for completions to work in mycli." >&2
[INFO] [stdout]        3480 │+        echo "See https://usage.jdx.dev for more information." >&2
[INFO] [stdout]        3481 │+        return 1
[INFO] [stdout]        3482 │+    fi
[INFO] [stdout]        3483 │+
[INFO] [stdout]        3484 │+    if [[ -z ${_usage_spec_mycli:-} ]]; then
[INFO] [stdout]        3485 │+        _usage_spec_mycli="$(mycli complete --usage)"
[INFO] [stdout]        3486 │+    fi
[INFO] [stdout]        3487 │+
[INFO] [stdout]        3488 │+	local cur prev words cword was_split comp_args
[INFO] [stdout]        3489 │+    _comp_initialize -n : -- "$@" || return
[INFO] [stdout]        3490 │+    # shellcheck disable=SC2207
[INFO] [stdout]        3491 │+	_comp_compgen -- -W "$(usage complete-word --shell bash -s "${spec_variable}" --cword="$cword" -- "${words[@]}")"
[INFO] [stdout]        3492 │+	_comp_ltrim_colon_completions "$cur"
[INFO] [stdout]        3493 │+    # shellcheck disable=SC2181
[INFO] [stdout]        3494 │+    if [[ $? -ne 0 ]]; then
[INFO] [stdout]        3495 │+        unset COMPREPLY
[INFO] [stdout]        3496 │+    fi
[INFO] [stdout]        3497 │+    return 0
[INFO] [stdout]        3498 │+}
[INFO] [stdout]        3499 │+
[INFO] [stdout]        3500 │+shopt -u hostcomplete && complete -o nospace -o bashdefault -o nosort -F _mycli mycli
[INFO] [stdout]        3501 │+# vim: noet ci pi sts=0 sw=4 ts=4 ft=sh
[INFO] [stdout] ────────────┴───────────────────────────────────────────────────────────────────
[INFO] [stdout] thread 'complete::bash::tests::test_complete_bash' panicked at src/complete/bash.rs:74:9:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x63a3667c8b2a - std::backtrace_rs::backtrace::libunwind::trace::h5a5b8284f2d0c266
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
[INFO] [stdout]    1:     0x63a3667c8b2a - std::backtrace_rs::backtrace::trace_unsynchronized::h76d4f1c9b0b875e3
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x63a3667c8b2a - std::sys::backtrace::_print_fmt::hc4546b8364a537c6
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x63a3667c8b2a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h5b6bd5631a6d1f6b
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x63a3667f29a3 - core::fmt::rt::Argument::fmt::h270f6602a2b96f62
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/fmt/rt.rs:177:76
[INFO] [stdout]    5:     0x63a3667f29a3 - core::fmt::write::h7550c97b06c86515
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/fmt/mod.rs:1186:21
[INFO] [stdout]    6:     0x63a3667c4db3 - std::io::Write::write_fmt::h509ff860e5956e5e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/io/mod.rs:1839:15
[INFO] [stdout]    7:     0x63a3667c8972 - std::sys::backtrace::BacktraceLock::print::h2395ccd2c84ba3aa
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    8:     0x63a3667c9f8a - std::panicking::default_hook::{{closure}}::he19d4c7230e07961
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:268:22
[INFO] [stdout]    9:     0x63a3667c9d94 - std::panicking::default_hook::hf614597d3c67bbdb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:292:9
[INFO] [stdout]   10:     0x63a3660c6499 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h39b51ce4599c23d1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2468:9
[INFO] [stdout]   11:     0x63a3660c6499 - test::test_main::{{closure}}::he977ae839a582784
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:133:21
[INFO] [stdout]   12:     0x63a3667ca628 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h9455091b6b06f9fb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2468:9
[INFO] [stdout]   13:     0x63a3667ca628 - std::panicking::rust_panic_with_hook::h8942133a8b252070
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:809:13
[INFO] [stdout]   14:     0x63a3667ca3ea - std::panicking::begin_panic_handler::{{closure}}::hb5f5963570096b29
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:674:13
[INFO] [stdout]   15:     0x63a3667c9009 - std::sys::backtrace::__rust_end_short_backtrace::h6208cedc1922feda
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:170:18
[INFO] [stdout]   16:     0x63a3667ca07c - rust_begin_unwind
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:665:5
[INFO] [stdout]   17:     0x63a365f933a0 - core::panicking::panic_fmt::h0c3082644d1bf418
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panicking.rs:74:14
[INFO] [stdout]   18:     0x63a365f93826 - core::result::unwrap_failed::hd20b4aa073bda1e2
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/result.rs:1700:5
[INFO] [stdout]   19:     0x63a3660075a4 - core::result::Result<T,E>::unwrap::h98642006c4587943
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/result.rs:1104:23
[INFO] [stdout]   20:     0x63a3660075a4 - usage::complete::bash::tests::test_complete_bash::h5ec853d1e12da5b7
[INFO] [stdout]                                at /opt/rustwide/workdir/src/complete/bash.rs:74:9
[INFO] [stdout]   21:     0x63a366006fa7 - usage::complete::bash::tests::test_complete_bash::{{closure}}::h14bae69519b1440f
[INFO] [stdout]                                at /opt/rustwide/workdir/src/complete/bash.rs:73:28
[INFO] [stdout]   22:     0x63a36603a5e6 - core::ops::function::FnOnce::call_once::he97f104f54c0ed7d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x63a3660cae5b - core::ops::function::FnOnce::call_once::h109cf8051a59b34e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x63a3660cae5b - test::__rust_begin_short_backtrace::hf4fff89d377446ba
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:621:18
[INFO] [stdout]   25:     0x63a3660ca697 - test::run_test_in_process::{{closure}}::h0e39181dd7ee5a43
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:644:60
[INFO] [stdout]   26:     0x63a3660ca697 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hc5a66a30f0bdfd1f
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   27:     0x63a3660ca697 - std::panicking::try::do_call::h873b7cf639554a5e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:557:40
[INFO] [stdout]   28:     0x63a3660ca697 - std::panicking::try::hdb19862fad9c8bd1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:520:19
[INFO] [stdout]   29:     0x63a3660ca697 - std::panic::catch_unwind::h281fe732d236d260
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panic.rs:358:14
[INFO] [stdout]   30:     0x63a3660ca697 - test::run_test_in_process::h949b6df8457ed338
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:644:27
[INFO] [stdout]   31:     0x63a3660ca697 - test::run_test::{{closure}}::h52c556a6d4740e10
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:565:43
[INFO] [stdout]   32:     0x63a36608f974 - test::run_test::{{closure}}::h4237f6381c45ccb9
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:595:41
[INFO] [stdout]   33:     0x63a36608f974 - std::sys::backtrace::__rust_begin_short_backtrace::h505c97a579eca628
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:154:18
[INFO] [stdout]   34:     0x63a36609303e - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h9e86b2e2bc107ea3
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/thread/mod.rs:538:17
[INFO] [stdout]   35:     0x63a36609303e - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h8b06ddb275ff4a25
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   36:     0x63a36609303e - std::panicking::try::do_call::hb26ecd7cd9a9355d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:557:40
[INFO] [stdout]   37:     0x63a36609303e - std::panicking::try::h8ddeca9d705f9069
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:520:19
[INFO] [stdout]   38:     0x63a36609303e - std::panic::catch_unwind::h49e1c33078844c46
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panic.rs:358:14
[INFO] [stdout]   39:     0x63a36609303e - std::thread::Builder::spawn_unchecked_::{{closure}}::h6073db6ff56ad35d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/thread/mod.rs:537:30
[INFO] [stdout]   40:     0x63a36609303e - core::ops::function::FnOnce::call_once{{vtable.shim}}::h2c5a5f3779c774f1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x63a3667cf09b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf75717d9f28faebf
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2454:9
[INFO] [stdout]   42:     0x63a3667cf09b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7bd883a5f3c5f3c1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2454:9
[INFO] [stdout]   43:     0x63a3667cf09b - std::sys::pal::unix::thread::Thread::new::thread_start::hcc78f3943333fa94
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/pal/unix/thread.rs:105:17
[INFO] [stdout]   44:     0x718429a6dac3 - <unknown>
[INFO] [stdout]   45:     0x718429afea04 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- complete::fish::tests::test_complete_fish stdout ----
[INFO] [stdout] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot Summary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[INFO] [stdout] Snapshot file: src/complete/snapshots/usage__complete__fish__tests__complete_fish.snap
[INFO] [stdout] Snapshot: complete_fish
[INFO] [stdout] Source: src/complete/fish.rs:62
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] Expression: complete_fish(&CompleteOptions
[INFO] [stdout] {
[INFO] [stdout]     shell: "fish".to_string(), bin: "mycli".to_string(), cache_key: None,
[INFO] [stdout]     spec: None, usage_cmd: Some("mycli complete --usage".to_string()),
[INFO] [stdout] })
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] +new results
[INFO] [stdout] ────────────┬───────────────────────────────────────────────────────────────────
[INFO] [stdout]           0 │+# if "usage" is not installed show an error
[INFO] [stdout]           1 │+if ! command -v usage &> /dev/null
[INFO] [stdout]           2 │+    echo >&2
[INFO] [stdout]           3 │+    echo "Error: usage CLI not found. This is required for completions to work in mycli." >&2
[INFO] [stdout]           4 │+    echo "See https://usage.jdx.dev for more information." >&2
[INFO] [stdout]           5 │+    return 1
[INFO] [stdout]           6 │+end
[INFO] [stdout]           7 │+
[INFO] [stdout]           8 │+set _usage_spec_mycli (mycli complete --usage | string collect)
[INFO] [stdout]           9 │+complete -xc mycli -a '(usage complete-word --shell fish -s "$_usage_spec_mycli" -- (commandline -cop) (commandline -t))'
[INFO] [stdout] ────────────┴───────────────────────────────────────────────────────────────────
[INFO] [stdout] thread 'complete::fish::tests::test_complete_fish' panicked at src/complete/fish.rs:62:9:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x63a3667c8b2a - std::backtrace_rs::backtrace::libunwind::trace::h5a5b8284f2d0c266
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
[INFO] [stdout]    1:     0x63a3667c8b2a - std::backtrace_rs::backtrace::trace_unsynchronized::h76d4f1c9b0b875e3
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x63a3667c8b2a - std::sys::backtrace::_print_fmt::hc4546b8364a537c6
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x63a3667c8b2a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h5b6bd5631a6d1f6b
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x63a3667f29a3 - core::fmt::rt::Argument::fmt::h270f6602a2b96f62
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/fmt/rt.rs:177:76
[INFO] [stdout]    5:     0x63a3667f29a3 - core::fmt::write::h7550c97b06c86515
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/fmt/mod.rs:1186:21
[INFO] [stdout]    6:     0x63a3667c4db3 - std::io::Write::write_fmt::h509ff860e5956e5e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/io/mod.rs:1839:15
[INFO] [stdout]    7:     0x63a3667c8972 - std::sys::backtrace::BacktraceLock::print::h2395ccd2c84ba3aa
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    8:     0x63a3667c9f8a - std::panicking::default_hook::{{closure}}::he19d4c7230e07961
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:268:22
[INFO] [stdout]    9:     0x63a3667c9d94 - std::panicking::default_hook::hf614597d3c67bbdb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:292:9
[INFO] [stdout]   10:     0x63a3660c6499 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h39b51ce4599c23d1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2468:9
[INFO] [stdout]   11:     0x63a3660c6499 - test::test_main::{{closure}}::he977ae839a582784
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:133:21
[INFO] [stdout]   12:     0x63a3667ca628 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h9455091b6b06f9fb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2468:9
[INFO] [stdout]   13:     0x63a3667ca628 - std::panicking::rust_panic_with_hook::h8942133a8b252070
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:809:13
[INFO] [stdout]   14:     0x63a3667ca3ea - std::panicking::begin_panic_handler::{{closure}}::hb5f5963570096b29
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:674:13
[INFO] [stdout]   15:     0x63a3667c9009 - std::sys::backtrace::__rust_end_short_backtrace::h6208cedc1922feda
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:170:18
[INFO] [stdout]   16:     0x63a3667ca07c - rust_begin_unwind
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:665:5
[INFO] [stdout]   17:     0x63a365f933a0 - core::panicking::panic_fmt::h0c3082644d1bf418
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panicking.rs:74:14
[INFO] [stdout]   18:     0x63a365f93826 - core::result::unwrap_failed::hd20b4aa073bda1e2
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/result.rs:1700:5
[INFO] [stdout]   19:     0x63a366030314 - core::result::Result<T,E>::unwrap::h98642006c4587943
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/result.rs:1104:23
[INFO] [stdout]   20:     0x63a366030314 - usage::complete::fish::tests::test_complete_fish::h26cf52b5fd328814
[INFO] [stdout]                                at /opt/rustwide/workdir/src/complete/fish.rs:62:9
[INFO] [stdout]   21:     0x63a36602fd17 - usage::complete::fish::tests::test_complete_fish::{{closure}}::hcfa845655b04d2f9
[INFO] [stdout]                                at /opt/rustwide/workdir/src/complete/fish.rs:61:28
[INFO] [stdout]   22:     0x63a366039aa6 - core::ops::function::FnOnce::call_once::h3b4299b9b4bf8bbb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x63a3660cae5b - core::ops::function::FnOnce::call_once::h109cf8051a59b34e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x63a3660cae5b - test::__rust_begin_short_backtrace::hf4fff89d377446ba
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:621:18
[INFO] [stdout]   25:     0x63a3660ca697 - test::run_test_in_process::{{closure}}::h0e39181dd7ee5a43
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:644:60
[INFO] [stdout]   26:     0x63a3660ca697 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hc5a66a30f0bdfd1f
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   27:     0x63a3660ca697 - std::panicking::try::do_call::h873b7cf639554a5e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:557:40
[INFO] [stdout]   28:     0x63a3660ca697 - std::panicking::try::hdb19862fad9c8bd1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:520:19
[INFO] [stdout]   29:     0x63a3660ca697 - std::panic::catch_unwind::h281fe732d236d260
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panic.rs:358:14
[INFO] [stdout]   30:     0x63a3660ca697 - test::run_test_in_process::h949b6df8457ed338
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:644:27
[INFO] [stdout]   31:     0x63a3660ca697 - test::run_test::{{closure}}::h52c556a6d4740e10
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:565:43
[INFO] [stdout]   32:     0x63a36608f974 - test::run_test::{{closure}}::h4237f6381c45ccb9
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:595:41
[INFO] [stdout]   33:     0x63a36608f974 - std::sys::backtrace::__rust_begin_short_backtrace::h505c97a579eca628
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:154:18
[INFO] [stdout]   34:     0x63a36609303e - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h9e86b2e2bc107ea3
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/thread/mod.rs:538:17
[INFO] [stdout]   35:     0x63a36609303e - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h8b06ddb275ff4a25
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   36:     0x63a36609303e - std::panicking::try::do_call::hb26ecd7cd9a9355d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:557:40
[INFO] [stdout]   37:     0x63a36609303e - std::panicking::try::h8ddeca9d705f9069
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:520:19
[INFO] [stdout]   38:     0x63a36609303e - std::panic::catch_unwind::h49e1c33078844c46
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panic.rs:358:14
[INFO] [stdout]   39:     0x63a36609303e - std::thread::Builder::spawn_unchecked_::{{closure}}::h6073db6ff56ad35d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/thread/mod.rs:537:30
[INFO] [stdout]   40:     0x63a36609303e - core::ops::function::FnOnce::call_once{{vtable.shim}}::h2c5a5f3779c774f1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x63a3667cf09b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf75717d9f28faebf
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2454:9
[INFO] [stdout]   42:     0x63a3667cf09b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7bd883a5f3c5f3c1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2454:9
[INFO] [stdout]   43:     0x63a3667cf09b - std::sys::pal::unix::thread::Thread::new::thread_start::hcc78f3943333fa94
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/pal/unix/thread.rs:105:17
[INFO] [stdout]   44:     0x718429a6dac3 - <unknown>
[INFO] [stdout]   45:     0x718429afea04 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- complete::zsh::tests::test_complete_zsh stdout ----
[INFO] [stdout] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot Summary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[INFO] [stdout] Snapshot file: src/complete/snapshots/usage__complete__zsh__tests__complete_zsh.snap
[INFO] [stdout] Snapshot: complete_zsh
[INFO] [stdout] Source: src/complete/zsh.rs:104
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] Expression: complete_zsh(&CompleteOptions
[INFO] [stdout] {
[INFO] [stdout]     shell: "zsh".to_string(), bin: "mycli".to_string(), cache_key: None, spec:
[INFO] [stdout]     None, usage_cmd: Some("mycli complete --usage".to_string()),
[INFO] [stdout] })
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] +new results
[INFO] [stdout] ────────────┬───────────────────────────────────────────────────────────────────
[INFO] [stdout]           0 │+#compdef mycli
[INFO] [stdout]           1 │+local curcontext="$curcontext"
[INFO] [stdout]           2 │+
[INFO] [stdout]           3 │+# caching config
[INFO] [stdout]           4 │+_usage_mycli_cache_policy() {
[INFO] [stdout]           5 │+  if [[ -z "${lifetime}" ]]; then
[INFO] [stdout]           6 │+    lifetime=$((60*60*4)) # 4 hours
[INFO] [stdout]           7 │+  fi
[INFO] [stdout]           8 │+  local -a oldp
[INFO] [stdout]           9 │+  oldp=( "$1"(Nms+${lifetime}) )
[INFO] [stdout]          10 │+  (( $#oldp ))
[INFO] [stdout]          11 │+}
[INFO] [stdout]          12 │+
[INFO] [stdout]          13 │+_mycli() {
[INFO] [stdout]          14 │+  typeset -A opt_args
[INFO] [stdout]          15 │+  local curcontext="$curcontext" spec cache_policy
[INFO] [stdout]          16 │+
[INFO] [stdout]          17 │+  if ! command -v usage &> /dev/null; then
[INFO] [stdout]          18 │+      echo >&2
[INFO] [stdout]          19 │+      echo "Error: usage CLI not found. This is required for completions to work in mycli." >&2
[INFO] [stdout]          20 │+      echo "See https://usage.jdx.dev for more information." >&2
[INFO] [stdout]          21 │+      return 1
[INFO] [stdout]          22 │+  fi
[INFO] [stdout]          23 │+
[INFO] [stdout]          24 │+  zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
[INFO] [stdout]          25 │+  if [[ -z $cache_policy ]]; then
[INFO] [stdout]          26 │+    zstyle ":completion:${curcontext}:" cache-policy _usage_mycli_cache_policy
[INFO] [stdout]          27 │+  fi
[INFO] [stdout]          28 │+
[INFO] [stdout]          29 │+  if ( [[ -z "${_usage_spec_mycli:-}" ]] || _cache_invalid _usage_spec_mycli ) \
[INFO] [stdout]          30 │+      && ! _retrieve_cache _usage_spec_mycli;
[INFO] [stdout]          31 │+  then
[INFO] [stdout]          32 │+    spec="$(mycli complete --usage)"
[INFO] [stdout]          33 │+    _store_cache _usage_spec_mycli spec
[INFO] [stdout]          34 │+  fi
[INFO] [stdout]          35 │+
[INFO] [stdout]          36 │+  _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))"
[INFO] [stdout]          37 │+  return 0
[INFO] [stdout]          38 │+}
[INFO] [stdout]          39 │+
[INFO] [stdout]          40 │+if [ "$funcstack[1]" = "_mycli" ]; then
[INFO] [stdout]          41 │+    _mycli "$@"
[INFO] [stdout]          42 │+else
[INFO] [stdout]          43 │+    compdef _mycli mycli
[INFO] [stdout]          44 │+fi
[INFO] [stdout]          45 │+
[INFO] [stdout]          46 │+# vim: noet ci pi sts=0 sw=4 ts=4
[INFO] [stdout] ────────────┴───────────────────────────────────────────────────────────────────
[INFO] [stdout] thread 'complete::zsh::tests::test_complete_zsh' panicked at src/complete/zsh.rs:104:9:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x63a3667c8b2a - std::backtrace_rs::backtrace::libunwind::trace::h5a5b8284f2d0c266
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
[INFO] [stdout]    1:     0x63a3667c8b2a - std::backtrace_rs::backtrace::trace_unsynchronized::h76d4f1c9b0b875e3
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x63a3667c8b2a - std::sys::backtrace::_print_fmt::hc4546b8364a537c6
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x63a3667c8b2a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h5b6bd5631a6d1f6b
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x63a3667f29a3 - core::fmt::rt::Argument::fmt::h270f6602a2b96f62
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/fmt/rt.rs:177:76
[INFO] [stdout]    5:     0x63a3667f29a3 - core::fmt::write::h7550c97b06c86515
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/fmt/mod.rs:1186:21
[INFO] [stdout]    6:     0x63a3667c4db3 - std::io::Write::write_fmt::h509ff860e5956e5e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/io/mod.rs:1839:15
[INFO] [stdout]    7:     0x63a3667c8972 - std::sys::backtrace::BacktraceLock::print::h2395ccd2c84ba3aa
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    8:     0x63a3667c9f8a - std::panicking::default_hook::{{closure}}::he19d4c7230e07961
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:268:22
[INFO] [stdout]    9:     0x63a3667c9d94 - std::panicking::default_hook::hf614597d3c67bbdb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:292:9
[INFO] [stdout]   10:     0x63a3660c6499 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h39b51ce4599c23d1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2468:9
[INFO] [stdout]   11:     0x63a3660c6499 - test::test_main::{{closure}}::he977ae839a582784
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:133:21
[INFO] [stdout]   12:     0x63a3667ca628 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h9455091b6b06f9fb
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2468:9
[INFO] [stdout]   13:     0x63a3667ca628 - std::panicking::rust_panic_with_hook::h8942133a8b252070
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:809:13
[INFO] [stdout]   14:     0x63a3667ca3ea - std::panicking::begin_panic_handler::{{closure}}::hb5f5963570096b29
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:674:13
[INFO] [stdout]   15:     0x63a3667c9009 - std::sys::backtrace::__rust_end_short_backtrace::h6208cedc1922feda
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:170:18
[INFO] [stdout]   16:     0x63a3667ca07c - rust_begin_unwind
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:665:5
[INFO] [stdout]   17:     0x63a365f933a0 - core::panicking::panic_fmt::h0c3082644d1bf418
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panicking.rs:74:14
[INFO] [stdout]   18:     0x63a365f93826 - core::result::unwrap_failed::hd20b4aa073bda1e2
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/result.rs:1700:5
[INFO] [stdout]   19:     0x63a365fec5d4 - core::result::Result<T,E>::unwrap::h98642006c4587943
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/result.rs:1104:23
[INFO] [stdout]   20:     0x63a365fec5d4 - usage::complete::zsh::tests::test_complete_zsh::h2d213af97e355fbb
[INFO] [stdout]                                at /opt/rustwide/workdir/src/complete/zsh.rs:104:9
[INFO] [stdout]   21:     0x63a365febfd7 - usage::complete::zsh::tests::test_complete_zsh::{{closure}}::h0bfd388663371ba5
[INFO] [stdout]                                at /opt/rustwide/workdir/src/complete/zsh.rs:103:27
[INFO] [stdout]   22:     0x63a36603a046 - core::ops::function::FnOnce::call_once::ha8551dcc609c471d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x63a3660cae5b - core::ops::function::FnOnce::call_once::h109cf8051a59b34e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x63a3660cae5b - test::__rust_begin_short_backtrace::hf4fff89d377446ba
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:621:18
[INFO] [stdout]   25:     0x63a3660ca697 - test::run_test_in_process::{{closure}}::h0e39181dd7ee5a43
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:644:60
[INFO] [stdout]   26:     0x63a3660ca697 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hc5a66a30f0bdfd1f
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   27:     0x63a3660ca697 - std::panicking::try::do_call::h873b7cf639554a5e
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:557:40
[INFO] [stdout]   28:     0x63a3660ca697 - std::panicking::try::hdb19862fad9c8bd1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:520:19
[INFO] [stdout]   29:     0x63a3660ca697 - std::panic::catch_unwind::h281fe732d236d260
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panic.rs:358:14
[INFO] [stdout]   30:     0x63a3660ca697 - test::run_test_in_process::h949b6df8457ed338
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:644:27
[INFO] [stdout]   31:     0x63a3660ca697 - test::run_test::{{closure}}::h52c556a6d4740e10
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:565:43
[INFO] [stdout]   32:     0x63a36608f974 - test::run_test::{{closure}}::h4237f6381c45ccb9
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/test/src/lib.rs:595:41
[INFO] [stdout]   33:     0x63a36608f974 - std::sys::backtrace::__rust_begin_short_backtrace::h505c97a579eca628
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/backtrace.rs:154:18
[INFO] [stdout]   34:     0x63a36609303e - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h9e86b2e2bc107ea3
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/thread/mod.rs:538:17
[INFO] [stdout]   35:     0x63a36609303e - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h8b06ddb275ff4a25
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   36:     0x63a36609303e - std::panicking::try::do_call::hb26ecd7cd9a9355d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:557:40
[INFO] [stdout]   37:     0x63a36609303e - std::panicking::try::h8ddeca9d705f9069
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panicking.rs:520:19
[INFO] [stdout]   38:     0x63a36609303e - std::panic::catch_unwind::h49e1c33078844c46
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/panic.rs:358:14
[INFO] [stdout]   39:     0x63a36609303e - std::thread::Builder::spawn_unchecked_::{{closure}}::h6073db6ff56ad35d
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/thread/mod.rs:537:30
[INFO] [stdout]   40:     0x63a36609303e - core::ops::function::FnOnce::call_once{{vtable.shim}}::h2c5a5f3779c774f1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x63a3667cf09b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf75717d9f28faebf
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2454:9
[INFO] [stdout]   42:     0x63a3667cf09b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7bd883a5f3c5f3c1
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/alloc/src/boxed.rs:2454:9
[INFO] [stdout]   43:     0x63a3667cf09b - std::sys::pal::unix::thread::Thread::new::thread_start::hcc78f3943333fa94
[INFO] [stdout]                                at /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/std/src/sys/pal/unix/thread.rs:105:17
[INFO] [stdout]   44:     0x718429a6dac3 - <unknown>
[INFO] [stdout]   45:     0x718429afea04 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     complete::bash::tests::test_complete_bash
[INFO] [stdout]     complete::fish::tests::test_complete_fish
[INFO] [stdout]     complete::zsh::tests::test_complete_zsh
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 12 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.94s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "3390d6b20d6c6dc9dc001cd5d17ad1c31afeefa612dc3be28d70c453ce7e2240", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3390d6b20d6c6dc9dc001cd5d17ad1c31afeefa612dc3be28d70c453ce7e2240", kill_on_drop: false }`
[INFO] [stdout] 3390d6b20d6c6dc9dc001cd5d17ad1c31afeefa612dc3be28d70c453ce7e2240
