From f5ea8325fedf6c3f0dfa567bc60496c7255cd512 Mon Sep 17 00:00:00 2001 From: William Wernert Date: Tue, 13 Oct 2020 09:45:32 -0400 Subject: [PATCH 1/2] [fix] Standardize input prompts * All prompts that are questions end in "?" * All other prompts end in ":" * Any additional sentences after a prompt follow normal grammatical rules for punctuation --- setup/so-functions | 2 +- setup/so-whiptail | 84 +++++++++++++++++++++++----------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/setup/so-functions b/setup/so-functions index e2f9604a1..b3304b372 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -99,7 +99,7 @@ add_manager_hostfile() { echo "Checking if I can resolve manager. If not add to hosts file" >> "$setup_log" 2>&1 # Pop up an input to get the IP address MSRVIP=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your Manager Server IP Address" 10 60 X.X.X.X 3>&1 1>&2 2>&3) + "Enter your Manager Server IP Address:" 10 60 X.X.X.X 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus diff --git a/setup/so-whiptail b/setup/so-whiptail index 2eca36d98..f70b818da 100755 --- a/setup/so-whiptail +++ b/setup/so-whiptail @@ -112,10 +112,10 @@ whiptail_sensor_nics() { filter_unused_nics if [[ $is_ec2 ]]; then - local menu_text="Please select NIC for the Monitor Interface" + local menu_text="Please select NIC for the Monitor Interface:" local list_type="radiolist" else - local menu_text="Please add NICs to the Monitor Interface" + local menu_text="Please add NICs to the Monitor Interface:" local list_type="checklist" fi @@ -151,7 +151,7 @@ whiptail_bond_nics_mtu() { # Set the MTU on the monitor interface MTU=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the MTU for the monitor NICs" 10 75 1500 3>&1 1>&2 2>&3) + "Enter the MTU for the monitor NICs:" 10 75 1500 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -189,7 +189,7 @@ whiptail_create_admin_user() { [ -n "$TESTING" ] && return ADMINUSER=$(whiptail --title "Security Onion Install" --inputbox \ - "Please enter a username for a new system admin user. The local onion account will be disabled during this install" 10 60 3>&1 1>&2 2>&3) + "Please enter a username for a new system admin user: \nThe local onion account will be disabled during this install" 10 60 3>&1 1>&2 2>&3) } @@ -198,7 +198,7 @@ whiptail_create_admin_user_password1() { [ -n "$TESTING" ] && return ADMINPASS1=$(whiptail --title "Security Onion Install" --passwordbox \ - "Enter a password for $ADMINUSER" 10 60 3>&1 1>&2 2>&3) + "Enter a password for $ADMINUSER:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -209,7 +209,7 @@ whiptail_create_admin_user_password2() { [ -n "$TESTING" ] && return ADMINPASS2=$(whiptail --title "Security Onion Install" --passwordbox \ - "Re-enter a password for $ADMINUSER" 10 60 3>&1 1>&2 2>&3) + "Re-enter a password for $ADMINUSER:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -221,7 +221,7 @@ whiptail_create_fleet_node_user() { [ -n "$TESTING" ] && return FLEETNODEUSER=$(whiptail --title "Security Onion Install" --inputbox \ - "Please enter an email for use as the username for the Fleet admin user." 10 60 3>&1 1>&2 2>&3) + "Please enter an email for use as the username for the Fleet admin user:" 10 60 3>&1 1>&2 2>&3) } @@ -230,7 +230,7 @@ whiptail_create_fleet_node_user_password1() { [ -n "$TESTING" ] && return FLEETNODEPASSWD1=$(whiptail --title "Security Onion Install" --passwordbox \ - "Enter a password for $FLEETNODEUSER" 10 60 3>&1 1>&2 2>&3) + "Enter a password for $FLEETNODEUSER:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -241,7 +241,7 @@ whiptail_create_fleet_node_user_password2() { [ -n "$TESTING" ] && return FLEETNODEPASSWD2=$(whiptail --title "Security Onion Install" --passwordbox \ - "Re-enter a password for $FLEETNODEUSER" 10 60 3>&1 1>&2 2>&3) + "Re-enter a password for $FLEETNODEUSER:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -261,7 +261,7 @@ whiptail_create_soremote_user_password1() { [ -n "$TESTING" ] && return SOREMOTEPASS1=$(whiptail --title "Security Onion Install" --passwordbox \ - "Enter a password for user soremote" 10 75 3>&1 1>&2 2>&3) + "Enter a password for user soremote:" 10 75 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -273,7 +273,7 @@ whiptail_create_soremote_user_password2() { [ -n "$TESTING" ] && return SOREMOTEPASS2=$(whiptail --title "Security Onion Install" --passwordbox \ - "Re-enter a password for user soremote" 10 75 3>&1 1>&2 2>&3) + "Re-enter a password for user soremote:" 10 75 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -285,8 +285,8 @@ whiptail_create_web_user() { [ -n "$TESTING" ] && return WEBUSER=$(whiptail --title "Security Onion Install" --inputbox \ - "Please enter an email address to create an administrator account for the web interface. \ - This will also be used for TheHive, Cortex, and Fleet" 10 60 3>&1 1>&2 2>&3) + "Please enter an email address to create an administrator account for the web interface: \n\ + This will also be used for TheHive, Cortex, and Fleet." 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -304,7 +304,7 @@ whiptail_create_web_user_password1() { [ -n "$TESTING" ] && return WEBPASSWD1=$(whiptail --title "Security Onion Install" --passwordbox \ - "Enter a password for $WEBUSER" 10 60 3>&1 1>&2 2>&3) + "Enter a password for $WEBUSER:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -315,7 +315,7 @@ whiptail_create_web_user_password2() { [ -n "$TESTING" ] && return WEBPASSWD2=$(whiptail --title "Security Onion Install" --passwordbox \ - "Re-enter a password for $WEBUSER" 10 60 3>&1 1>&2 2>&3) + "Re-enter a password for $WEBUSER:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -327,7 +327,7 @@ whiptail_fleet_custom_hostname() { [ -n "$TESTING" ] && return FLEETCUSTOMHOSTNAME=$(whiptail --title "Security Onion Install" --inputbox \ - "What FQDN should osquery clients use for connections to this Fleet node? Leave blank if the local system hostname will be used." 10 60 3>&1 1>&2 2>&3) + "What FQDN should osquery clients use for connections to this Fleet node? Leave blank if the local system hostname will be used:" 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -393,7 +393,7 @@ whiptail_cur_close_days() { [ -n "$TESTING" ] && return CURCLOSEDAYS=$(whiptail --title "Security Onion Setup" --inputbox \ - "Please specify the threshold (in days) at which Elasticsearch indices will be closed" 10 75 $CURCLOSEDAYS 3>&1 1>&2 2>&3) + "Please specify the threshold (in days) at which Elasticsearch indices will be closed:" 10 75 $CURCLOSEDAYS 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -470,7 +470,7 @@ whiptail_enable_components() { STRELKA=0 COMPONENTS=$(whiptail --title "Security Onion Setup" --checklist \ - "Select Components to install" 20 75 8 \ + "Select Components to install:" 20 75 8 \ GRAFANA "Enable Grafana for system monitoring" ON \ OSQUERY "Enable Fleet with osquery" ON \ WAZUH "Enable Wazuh" ON \ @@ -527,7 +527,7 @@ whiptail_homenet_manager() { [ -n "$TESTING" ] && return HNMANAGER=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your HOME_NET, separating CIDR blocks with a comma (',')." 10 75 10.0.0.0/8,192.168.0.0/16,172.16.0.0/12 3>&1 1>&2 2>&3) + "Enter your HOME_NET, separating CIDR blocks with a comma (,):" 10 75 10.0.0.0/8,192.168.0.0/16,172.16.0.0/12 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -547,7 +547,7 @@ whiptail_homenet_sensor() { export HNSENSOR=inherit else HNSENSOR=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your HOME_NET, separating CIDR blocks with a comma (',')." 10 75 10.0.0.0/8,192.168.0.0/16,172.16.0.0/12 3>&1 1>&2 2>&3) + "Enter your HOME_NET, separating CIDR blocks with a comma (,):" 10 75 10.0.0.0/8,192.168.0.0/16,172.16.0.0/12 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -601,7 +601,7 @@ whiptail_log_size_limit() { log_size_limit=$(whiptail --title "Security Onion Setup" --inputbox \ - "Please specify the amount of disk space (in GB) you would like to allocate for Elasticsearch data storage. \ + "Please specify the amount of disk space (in GB) you would like to allocate for Elasticsearch data storage: \n\ By default, this is set to 80% of the disk space allotted for /nsm." 10 75 "$log_size_limit" 3>&1 1>&2 2>&3) local exitstatus=$? @@ -614,7 +614,7 @@ whiptail_management_interface_dns() { [ -n "$TESTING" ] && return MDNS=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your DNS servers separated by a space" 10 60 8.8.8.8 8.8.4.4 3>&1 1>&2 2>&3) + "Enter your DNS servers separated by a space:" 10 60 8.8.8.8 8.8.4.4 3>&1 1>&2 2>&3) } @@ -623,7 +623,7 @@ whiptail_management_interface_dns_search() { [ -n "$TESTING" ] && return MSEARCH=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your DNS search domain" 10 60 searchdomain.local 3>&1 1>&2 2>&3) + "Enter your DNS search domain:" 10 60 searchdomain.local 3>&1 1>&2 2>&3) } @@ -632,7 +632,7 @@ whiptail_management_interface_gateway() { [ -n "$TESTING" ] && return MGATEWAY=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your gateway" 10 60 X.X.X.X 3>&1 1>&2 2>&3) + "Enter your gateway:" 10 60 X.X.X.X 3>&1 1>&2 2>&3) } @@ -641,7 +641,7 @@ whiptail_management_interface_ip() { [ -n "$TESTING" ] && return MIP=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your IP address" 10 60 X.X.X.X 3>&1 1>&2 2>&3) + "Enter your IP address:" 10 60 X.X.X.X 3>&1 1>&2 2>&3) } @@ -650,7 +650,7 @@ whiptail_management_interface_mask() { [ -n "$TESTING" ] && return MMASK=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the bit mask for your subnet" 10 60 24 3>&1 1>&2 2>&3) + "Enter the bit mask for your subnet:" 10 60 24 3>&1 1>&2 2>&3) } @@ -660,13 +660,13 @@ whiptail_management_nic() { filter_unused_nics - MNIC=$(whiptail --title "NIC Setup" --radiolist "Please select your management NIC" 20 75 12 "${nic_list[@]}" 3>&1 1>&2 2>&3 ) + MNIC=$(whiptail --title "NIC Setup" --radiolist "Please select your management NIC:" 20 75 12 "${nic_list[@]}" 3>&1 1>&2 2>&3 ) local exitstatus=$? whiptail_check_exitstatus $exitstatus while [ -z "$MNIC" ] do - MNIC=$(whiptail --title "NIC Setup" --radiolist "Please select your management NIC" 20 75 12 "${nic_list[@]}" 3>&1 1>&2 2>&3 ) + MNIC=$(whiptail --title "NIC Setup" --radiolist "Please select your management NIC:" 20 75 12 "${nic_list[@]}" 3>&1 1>&2 2>&3 ) local exitstatus=$? whiptail_check_exitstatus $exitstatus done @@ -678,7 +678,7 @@ whiptail_nids() { [ -n "$TESTING" ] && return NIDS=$(whiptail --title "Security Onion Setup" --radiolist \ - "Choose which IDS to run. \n\n(Snort 3.0 support will be added once it is out of beta.)" 25 75 4 \ + "Choose which IDS to run: \n\n(Snort 3.0 support will be added once it is out of beta.)" 25 75 4 \ "Suricata" "Suricata" ON \ "Snort" "Placeholder for Snort 3.0 " OFF 3>&1 1>&2 2>&3 ) @@ -692,7 +692,7 @@ whiptail_oinkcode() { [ -n "$TESTING" ] && return OINKCODE=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your ET Pro or oinkcode" 10 75 XXXXXXX 3>&1 1>&2 2>&3) + "Enter your ET Pro or oinkcode:" 10 75 XXXXXXX 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -715,7 +715,7 @@ whiptail_management_server() { [ -n "$TESTING" ] && return MSRV=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter your Manager Server hostname. It is CASE SENSITIVE!" 10 75 XXXX 3>&1 1>&2 2>&3) + "Enter your Manager Server hostname: \nIt is CASE SENSITIVE!" 10 75 XXXX 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -762,7 +762,7 @@ whiptail_manager_adv_service_zeeklogs() { [ -n "$TESTING" ] && return - BLOGS=$(whiptail --title "Security Onion Setup" --checklist "Please select Logs to Send:" 24 75 12 \ + BLOGS=$(whiptail --title "Security Onion Setup" --checklist "Please select logs to Send:" 24 75 12 \ "conn" "Connection Logging" ON \ "dce_rpc" "RPC Logs" ON \ "dhcp" "DHCP Logs" ON \ @@ -932,7 +932,7 @@ whiptail_patch_schedule() { local patch_schedule patch_schedule=$(whiptail --title "Security Onion Setup" --radiolist \ - "Choose OS patch schedule. This will NOT update Security Onion related tools such as Zeek, Elasticsearch, Kibana, SaltStack, etc." 15 75 5 \ + "Choose OS patch schedule: This will NOT update Security Onion related tools such as Zeek, Elasticsearch, Kibana, SaltStack, etc." 15 75 5 \ "Automatic" "Updates installed every 8 hours if available" ON \ "Manual" "Updates will be installed manually" OFF \ "Import Schedule" "Import named schedule on following screen" OFF \ @@ -969,7 +969,7 @@ whiptail_patch_schedule_import() { unset PATCHSCHEDULENAME PATCHSCHEDULENAME=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the name of the OS patch schedule you want to inherit. Available schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) + "Enter the name of the OS patch schedule you want to inherit: Available schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -977,7 +977,7 @@ whiptail_patch_schedule_import() { while [[ -z "$PATCHSCHEDULENAME" ]]; do whiptail --title "Security Onion Setup" --msgbox "Please enter a name for the OS patch schedule you want to inherit." 8 75 PATCHSCHEDULENAME=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the name of the OS patch schedule you want to inherit. Available schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) + "Enter the name of the OS patch schedule you want to inherit: Available schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -1072,7 +1072,7 @@ whiptail_sensor_config() { [ -n "$TESTING" ] && return NSMSETUP=$(whiptail --title "Security Onion Setup" --radiolist \ - "What type of configuration would you like to use?:" 20 75 4 \ + "What type of configuration would you like to use?" 20 75 4 \ "BASIC" "Install NSM components with recommended settings" ON \ "ADVANCED" "Configure each component individually" OFF 3>&1 1>&2 2>&3 ) @@ -1090,7 +1090,7 @@ whiptail_set_hostname() { if [[ "$HOSTNAME" == *'localhost'* ]]; then HOSTNAME=securityonion; fi HOSTNAME=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the hostname (not FQDN) you would like to set." 10 75 "$HOSTNAME" 3>&1 1>&2 2>&3) + "Enter the hostname (not FQDN) you would like to set:" 10 75 "$HOSTNAME" 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -1105,7 +1105,7 @@ whiptail_set_hostname() { --msgbox "$error_message" 10 75 HOSTNAME=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the hostname (not FQDN) you would like to set." 10 75 "$HOSTNAME" 3>&1 1>&2 2>&3) + "Enter the hostname (not FQDN) you would like to set:" 10 75 "$HOSTNAME" 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -1131,7 +1131,7 @@ whiptail_set_redirect_host() { [ -n "$TESTING" ] && return REDIRECTHOST=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the Hostname or IP you would like to use for the web interface." 10 75 "$HOSTNAME" 3>&1 1>&2 2>&3) + "Enter the Hostname or IP you would like to use for the web interface:" 10 75 "$HOSTNAME" 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus } @@ -1192,7 +1192,7 @@ whiptail_so_allow() { if [[ $exitstatus == 0 ]]; then ALLOW_CIDR=$(whiptail --title "Security Onion Setup" \ - --inputbox "Enter a single IP address, or an IP range, in CIDR notation, to allow:" \ + --inputbox "Enter a single IP address or an IP range, in CIDR notation, to allow:" \ 10 75 3>&1 1>&2 2>&3) local exitstatus=$? @@ -1258,7 +1258,7 @@ whiptail_manager_updates() { local update_string update_string=$(whiptail --title "Security Onion Setup" --radiolist \ - "How would you like to download OS package updates for your grid?:" 20 75 4 \ + "How would you like to download OS package updates for your grid?" 20 75 4 \ "MANAGER" "Manager node is proxy for updates" ON \ "OPEN" "Each node connects to the Internet for updates" OFF 3>&1 1>&2 2>&3 ) local exitstatus=$? @@ -1291,7 +1291,7 @@ whiptail_node_updates() { [ -n "$TESTING" ] && return NODEUPDATES=$(whiptail --title "Security Onion Setup" --radiolist \ - "How would you like to download OS package updates for your grid?:" 20 75 4 \ + "How would you like to download OS package updates for your grid?" 20 75 4 \ "MANAGER" "Manager node is proxy for updates." ON \ "OPEN" "Each node connects to the Internet for updates" OFF 3>&1 1>&2 2>&3 ) From 9dc491bd719bc007b0758ded07ceb45f85a9be3d Mon Sep 17 00:00:00 2001 From: William Wernert Date: Tue, 13 Oct 2020 10:23:47 -0400 Subject: [PATCH 2/2] [refactor] Fixes per style guide --- setup/so-whiptail | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup/so-whiptail b/setup/so-whiptail index f70b818da..bb116f918 100755 --- a/setup/so-whiptail +++ b/setup/so-whiptail @@ -327,7 +327,7 @@ whiptail_fleet_custom_hostname() { [ -n "$TESTING" ] && return FLEETCUSTOMHOSTNAME=$(whiptail --title "Security Onion Install" --inputbox \ - "What FQDN should osquery clients use for connections to this Fleet node? Leave blank if the local system hostname will be used:" 10 60 3>&1 1>&2 2>&3) + "What FQDN should osquery clients use for connections to this Fleet node? Leave blank if the local system hostname will be used." 10 60 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -762,7 +762,7 @@ whiptail_manager_adv_service_zeeklogs() { [ -n "$TESTING" ] && return - BLOGS=$(whiptail --title "Security Onion Setup" --checklist "Please select logs to Send:" 24 75 12 \ + BLOGS=$(whiptail --title "Security Onion Setup" --checklist "Please select logs to send:" 24 75 12 \ "conn" "Connection Logging" ON \ "dce_rpc" "RPC Logs" ON \ "dhcp" "DHCP Logs" ON \ @@ -932,7 +932,7 @@ whiptail_patch_schedule() { local patch_schedule patch_schedule=$(whiptail --title "Security Onion Setup" --radiolist \ - "Choose OS patch schedule: This will NOT update Security Onion related tools such as Zeek, Elasticsearch, Kibana, SaltStack, etc." 15 75 5 \ + "Choose OS patch schedule: \nThis will NOT update Security Onion related tools such as Zeek, Elasticsearch, Kibana, SaltStack, etc." 15 75 5 \ "Automatic" "Updates installed every 8 hours if available" ON \ "Manual" "Updates will be installed manually" OFF \ "Import Schedule" "Import named schedule on following screen" OFF \ @@ -969,7 +969,7 @@ whiptail_patch_schedule_import() { unset PATCHSCHEDULENAME PATCHSCHEDULENAME=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the name of the OS patch schedule you want to inherit: Available schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) + "Enter the name of the OS patch schedule you want to inherit: \nAvailable schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus @@ -977,7 +977,7 @@ whiptail_patch_schedule_import() { while [[ -z "$PATCHSCHEDULENAME" ]]; do whiptail --title "Security Onion Setup" --msgbox "Please enter a name for the OS patch schedule you want to inherit." 8 75 PATCHSCHEDULENAME=$(whiptail --title "Security Onion Setup" --inputbox \ - "Enter the name of the OS patch schedule you want to inherit: Available schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) + "Enter the name of the OS patch schedule you want to inherit: \nAvailable schedules can be found on the manager under /opt/so/salt/patch/os/schedules/.yml" 10 75 3>&1 1>&2 2>&3) local exitstatus=$? whiptail_check_exitstatus $exitstatus