在后台运行时获取用户输入

在后台运行时获取用户输入

我正在编写一个脚本,提示用户输入并随后进行一些处理。我本来是用来read获取数据的,但后来我注意到,当使用键盘快捷键运行脚本时(我在 Ubuntu 的键盘快捷键列表中添加了一个条目),它会忽略read并继续执行其余代码。

如何使用像这样在后台运行的脚本读取用户输入?

答案1

如果我理解正确的话,您是直接从 GUI 环境运行脚本,而不是从终端内部运行脚本。

终端为脚本提供了一种接收输入的方式。如果您通过菜单项或键盘快捷键从 GUI 运行脚本,则脚本的输入不会连接到任何内容(这称为“无内容”)/dev/null),因此当您要求读取一行时,该read命令表示没有任何内容可读取(文件末尾)。

您有两种解决方案:更改调用脚本的方式,或更改脚本。前者更简单,有时允许您的脚本在终端内执行。后者更复杂但更灵活。

您可以轻松更改脚本以在终端中运行。不要设置 的键盘快捷键,而是为或或任何您喜欢的终端模拟器/path/to/script设置键盘快捷键。一旦您按下该键,终端窗口就会出现,并在脚本终止时消失。xterm -e /path/to/scriptgnome-terminal -e /path/to/script

或者,您可以更改脚本以通过 GUI 窗口而不是从标准输入读取输入。禅尼蒂是一个常见的选择(有一个Ubuntu 包 安装 zenity http://bit.ly/software-small)。在脚本内部,您可以用来[ -t 0 ]测试它是否在终端中运行。

if [ -t 0 ]; then
  echo "What is your favorite color?"
  read -r color
else
  color=$(zenity --entry --text "What is your favorite color?")
fi

相关内容