【发布时间】: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/bashshebang 的方式运行吗? (例如,sh yourscript将忽略 shebang 并使用sh运行您的脚本,而不是bash;sh不保证支持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