Vla*_*nov 4 bash shell-script dialog
我有以下脚本:
#!/bin/bash
set -e
TITLE="Choose version"
VERSIONS=$(cat <<'END'
AAA
BBB
END
)
VERSION_LIST=$(echo "$VERSIONS" | awk '{print NR, " ", $0}')
INDEX=$(whiptail \
--no-cancel \
--menu "$TITLE" 15 40 15 \
$VERSION_LIST \
3>&1 1>&2 2>&3)
Run Code Online (Sandbox Code Playgroud)
当我使它可执行并运行它时,它会按预期工作。当我source
从 bash 或 zsh调用它时,会发生以下情况之一:
ls somefile
并按下TAB以完成。我正在使用 Fedora 29,我也可以在 Mac OS 上看到这种行为。在源脚本中使用whiptail/dialog 时,是否需要考虑任何特定的考虑因素?
您的脚本errexit
使用set -e
. 获取它后,未经检查的失败命令将导致 shell 退出。如果您使用可编程完成脚本,其中一些可能会运行失败的命令,这将解释制表符完成触发它的原因。
这里的解决方案是不获取脚本,而是像往常一样运行它,或者替换set -e
为对所有相关命令进行足够的错误检查,return
如果它们失败。(不是exit
,因为这会退出整个 shell,return
从源脚本返回。)