【问题标题】:Read input twice on the same line (without line break) using Bash Script使用 Bash 脚本在同一行(没有换行符)读取输入两次
【发布时间】:2017-02-02 12:18:59
【问题描述】:

我试图从 bash 脚本的同一行读取用户输入两次。它根本不是很有用,但它很漂亮,我正在努力实现这一点。

我的代码的相关部分如下所示:

#!/usr/bin/env bash

FROM_YEAR=2015
TO_YEAR=2017
read -e -p "Backup from " -i "${FROM_YEAR}" FROM_YEAR
read -e -p " to "         -i "${TO_YEAR}"   TO_YEAR

使用此代码,我得到以下信息:

Backup from 2015 *press enter*
 to 2017

但我想要这样的输出:

Backup from 2015 *press enter* to 2017

当然,我想要一个没有标记的输出 (*press enter* )。


如何使用 bash 脚本实现这一点?

谢谢你:)

【问题讨论】:

  • 按 Enter 回答提示会自动转到下一行。 bash 不是填表应用程序。
  • 没有办法解决这个问题吗?
  • 使用工具进行全屏输入,而不是内置的read

标签: bash shell


【解决方案1】:

总是有解决方法,但它们并不总是可移植的。这很有可能会奏效:

#!/usr/bin/bash

FROM_YEAR=2015
TO_YEAR=2017
read -e -p "Backup from " -i "${FROM_YEAR}" FROM_YEAR 
printf '\033[1A\033[16C'
read -e -p " to " -i "${TO_YEAR}" TO_YEAR

请注意,这是一个可怕的 hack,如果在您编辑后 FROM_YEAR 没有精确的 4 位数字,结果将不会很漂亮。

【讨论】:

    【解决方案2】:
    FROM_YEAR=2015 TO_YEAR=2017
    read -p "Backup from ${FROM_YEAR} to ${TO_YEAR}: " FROM_YEAR TO_YEAR
    echo $FROM_YEAR $TO_YEAR 
    

    输出,如果用户输入“3 4”:

    Backup from 2015 to 2017: 3 4
    3 4
    

    【讨论】:

      【解决方案3】:

      你可以,我猜,clear 初始显示之前的屏幕,然后在用户按下 [Enter] 后再次clear 屏幕,这样你就可以在你想要的地方重新显示内容。

      我有 bash 脚本,其中的菜单可以这样工作。您必须重新显示所有内容,但对于简单的需求,它可以完成工作(当然,如果您不介意清除屏幕)。

      【讨论】:

        猜你喜欢
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多