nma*_*mat 5 shell keyboard-shortcuts terminal input x11
我正在编写一个脚本,提示用户输入并在之后进行一些处理。我是read
用来获取数据的,但后来我注意到,当脚本使用键盘快捷键运行时(我在 Ubuntu 的键盘快捷键列表中添加了一个条目),它会忽略read
并继续执行其余代码。
如何使用像这样在后台运行的脚本读取用户输入?
如果我理解正确,您是直接从 GUI 环境运行脚本,而不是从终端内部运行。
终端为脚本提供了一种接收输入的方式。如果您通过菜单项或键盘快捷键从 GUI 运行脚本,则脚本的输入与任何内容都没有关联(这称为空内容/dev/null
),因此当您要求读取一行时,该read
命令会显示没有内容可读取(文件结束)。
您有两种解决方案:更改调用脚本的方式,或更改脚本。前者更简单,有时允许您的脚本在终端内执行。后者更复杂,但更灵活。
您可以轻松更改脚本以在终端中运行。不是为 设置键盘快捷键/path/to/script
,而是为xterm -e /path/to/script
或gnome-terminal -e /path/to/script
或您喜欢的任何终端模拟器设置键盘快捷键。终端窗口将在您按下该键后立即出现,并在您的脚本终止时消失。
或者,您可以更改脚本以通过 GUI 窗口而不是从其标准输入读取输入。Zenity是一个常见的选择(有一个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
Run Code Online (Sandbox Code Playgroud)