案例陈述不起作用。按 Enter (空字符串)不会退出脚本,其他情况下也不起作用。没有一个exit 1
命令在应有的情况下运行,当我专门为其键入文本时,所有情况都会失败。
我发现哪种情况有效,但是其中的exit 1
语句不会退出脚本。如何正确在该位置退出脚本?
#!/bin/bash
...
get_virtual_host() {
if [ -t 0 ]; then
read -p "Create virtualhost (= Folder name,case sensitive)" -r host
else
# same as 'read' but for GUI
host=$(zenity --forms --add-entry=Name --text='Create virtualhost (= Folder name,case sensitive)')
fi
case "$host" in
"") notify_user "Bad input: empty" ; exit 1 ;;
*"*"*) notify_user "Bad input: wildcard" ; exit 1 ;;
*[[:space:]]*) notify_user "Bad input: whitespace" ; exit 1 ;;
esac
echo "$host"
}
host=$(get_virtual_host)
需要补充的内容:
notify_user () {
echo "$1" >&2
[ -t 0 ] || if type -p notify-send >/dev/null; then notify-send "$1"; else xmessage -buttons Ok:0 -nearmouse "$1" -timeout 10; fi
}
答案 0 :(得分:3)
该函数实际上编写正确。这就是问题所在。
host=$(get_virtual_host)
当您捕获命令的输出时,该命令在子shell中运行。退出子Shell并不会直接导致父Shell退出。父外壳程序需要检查子外壳程序的退出状态。
host=$(get_virtual_host) || exit
如果get_virtual_host
失败,它将退出父级。没有显式退出代码的裸exit
会转发$?
的现有值。