我正在编写一个脚本,提示用户输入并随后进行一些处理。我本来是用来read
获取数据的,但后来我注意到,当使用键盘快捷键运行脚本时(我在 Ubuntu 的键盘快捷键列表中添加了一个条目),它会忽略read
并继续执行其余代码。
如何使用像这样在后台运行的脚本读取用户输入?
答案1
如果我理解正确的话,您是直接从 GUI 环境运行脚本,而不是从终端内部运行脚本。
终端为脚本提供了一种接收输入的方式。如果您通过菜单项或键盘快捷键从 GUI 运行脚本,则脚本的输入不会连接到任何内容(这称为“无内容”)/dev/null
),因此当您要求读取一行时,该read
命令表示没有任何内容可读取(文件末尾)。
您有两种解决方案:更改调用脚本的方式,或更改脚本。前者更简单,有时允许您的脚本在终端内执行。后者更复杂但更灵活。
您可以轻松更改脚本以在终端中运行。不要设置 的键盘快捷键,而是为或或任何您喜欢的终端模拟器/path/to/script
设置键盘快捷键。一旦您按下该键,终端窗口就会出现,并在脚本终止时消失。xterm -e /path/to/script
gnome-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