【问题标题】:"read" command not popping up an input window (when run without a terminal) in bash“读取”命令没有在 bash 中弹出输入窗口(在没有终端的情况下运行)
【发布时间】:2020-02-04 21:37:20
【问题描述】:

我遇到了一些问题:运行我放置在文件浏览器脚本文件夹中的脚本,使其可从右键单击菜单运行,但在调用读取命令时实际上无法生成用户输入提示.

有没有办法强制它创建提示?

这是我用来测试的代码,没什么:

#!/bin/bash
read -p "Hour " answer
hours=$answer

我的脚本正在从 Nemo(Linux Mint 19.2 中的文件浏览器)的右键菜单中调用,并安装在 /home/username/.local/share/nemo/scripts 中。

read 在终端上运行良好,或者使用“在终端中运行”运行脚本,但 Nemo 中的右键菜单无法启动。

【问题讨论】:

  • 您确定将 stderr(提示打印到的位置)定向到 TTY 吗?另外,您确定脚本以#!/bin/bash shebang 的方式运行吗? (例如,sh yourscript 将忽略 shebang 并使用sh 运行您的脚本,而不是bashsh 不保证支持read -p)。
  • hours=$answer 没有做任何有用的事情。你可以直接写read -p "Hour " hours
  • ...尽管如此,这个问题还不够完整,无法让其他人自己重现问题。如果是您的文件浏览器通过 stderr 重定向或 sh 而不是 bash 调用脚本,那么这里没有足够的信息让我们知道这是哪个“文件浏览器”,或者它是如何配置的。请确保您的问题是minimal reproducible example,其中包含其他人看到问题所需的一切。
  • ...你可以做一些测试。 echo "stdout"; echo "stderr" >&2,看看是否都打印了; echo "Bash version: $BASH_VERSION",看看是否打印了版本字符串。
  • 您可以做的另一件事来测试标准错误:if [ -t 2 ]; then echo "stderr is directed to the TTY"; else echo "stderr is NOT directed to the TTY"; fi

标签: linux bash


【解决方案1】:

这是基于对read 命令作用的误解。正如triplee 和charles duffy 所指出的,read 命令实际上不能创建自己的终端窗口。在我的操作系统上,Zenity 是预装的,所以下面的代码可以作为read -p 'This is a test! ' myvar 的替代品正常工作:

#!/bin/bash
myvar=$(zenity --entry --text="This is a test!")

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    相关资源
    最近更新 更多